Linux-PAM-1.1.8/0000755000000000000000000000000012216542314010202 500000000000000Linux-PAM-1.1.8/po/0000755000000000000000000000000012216542313010617 500000000000000Linux-PAM-1.1.8/po/ru.gmo0000644000000000000000000003663712216527620011714 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %1 9-C$q5? 1s4$9'"anf H ;5!7q!Z!""|#[#}#Xv$b$#2%>V%g%)%"'&J&;f&%&m&E6'/|'-')'r(3w(W(q)u)d)X]*4*R*&>+#e+/++;+,O',w,:,1,8-Z<- ----<.>A.<.=..</ R/]/|/q/.0e=1Q1Y1TO2'2#2/2Y 3Yz3t3bI4D4r5Jd6F6j6a7%7808N8#n828!878R9r93902:Vc:y:%4;1Z;6;';>;$*<+O<{<<<Z<,!=FN= =,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-09 01:12+0000 Last-Translator: Yulia Language-Team: Russian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ru Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); %a %b %e %H:%M:%S %Z %Yс %.*sна %.*sСбой %s. Получен сигнал %d%sСбой %s. Код выхода: %dСбой %s. Неизвестный статус 0x%x%s: указано неверное число для --reset= %s: не удается выполнить сброс всех пользователей в ненулевое значение %s: неопознанный параметр %s %s: [--file имя_корневого_файла] [--user имя_пользователя] [--reset[=n]] [--quiet] %s: [-f имя_корневого_файла] [--file имя_корневого_файла] [-u имя_пользователя] [--user имя_пользователя] [-r] [--reset[=n]] [--quiet] (текущий) пароль UNIX: ...Извините, ваше время истекло! ...Время истекает... Доступ предоставлен (последнее обращение было %ld сек. назад).Учетная запись заблокирована как следствие неудачных попыток входа (всего -- %u).Учетная запись временно заблокирована (осталось %ld сек.)Приложение должно повторно вызвать libpamОшибка при проверке подлинностиСбой при проверке подлинностиНе удается восстановить сведения аутентификацииСлужбе проверки подлинности не удается загрузить сведения аутентификацииСлужбе проверки подлинности не удается загрузить учетные данные пользователяОграничение срока действия маркера проверки подлинности отключеноСрок действия маркера проверки подлинности истекМаркер проверки подлинности больше недействителен; требуется новыйБлокировка маркера проверки подлинности занятаОшибка при операциях с маркером проверки подлинностиНЕУДАЧНЫЙ ПАРОЛЬ: %sВ pam_*_item() передан неверный элементНе удалось создать/удалить запись для указанного сеансаСмена пароля STRESS для %s.Смена пароля для %s.Ошибка диалогаПроцесс диалога ожидает событиеСоздание каталога %s.Критическая ошибка -- незамедлительное прерывание операцииКонтекст безопасности по умолчанию %s Введите новый пароль STRESS: Введите новый пароль UNIX: Ошибка в модуле службыСлужбе паролей не удалось выполнить предварительную проверкуНе удалось загрузить модульСбой при настройке учетных данных пользователяИспользовано максимальное число попыток, заданное для службыНедостаточно учетных данных для доступа к данным проверки подлинностиКонтекст %s, используемый при создании ключей, назначенПоследняя неудачная попытка входа в систему:%s%s%sПоследний вход в систему:%s%s%sУчетная запись Сбой Последний сбой С Ошибка буфера памятиНеизвестный модульПароль NIS изменить нельзя.Новый пароль %s%s: Для роли %s нет типа по умолчанию Почты нет.Отсутствуют данные, специфичные для модуляПароль не указанНеверный контекст безопасностиИзменение пароля отменено.Этот пароль уже использовался.Этот пароль уже был использован. Выберите другой.Пароль не измененПароль: Доступ запрещенПовторите ввод %sПовторите ввод нового пароля %s%s: Повторите ввод нового пароля STRESS: Повторите ввод нового пароля UNIX: Контекст безопасности %s назначенОшибка службыИзвините, но пароли не совпадают.УспехСимвол не найденСистемная ошибкаВозвращенное значение не должно учитываться при передаче в PAMСо времени последнего входа была %d неудачная попытка.Число неудачных попыток со времени последнего входа: %d.Число неудачных попыток со времени последнего входа: %d.Число неудачных попыток со времени последнего входа: %d.Слишком много регистраций в системе для «%s».Не удалось создать и инициализировать каталог %s.Не удалось получить корректный контекст для %sНеизвестная ошибка PAMНеизвестная ошибкаНеизвестный пользовательСрок действия учетной записи пользователя истекСрок действия учетных данных пользователя истекПользователь не известен базовому модулю проверки подлинностиПодтверждение введено неправильно; пароль не измененПредупреждение: срок действия пароля истекает через %d деньПредупреждение: срок действия пароля истекает через %d дняПредупреждение: срок действия пароля истекает через %d днейПредупреждение: срок действия пароля истекает через %d дн(я)(ей)Добро пожаловать в новую учетную запись!Хотите ввести другую роль или уровень?Вам необходимо немедленно сменить пароль (пароль устарел)Вам необходимо немедленно сменить пароль (в принудительном режиме root)Есть почта в папке %s.Есть почта.Есть новая почта в папке %s.Есть новая почта.Нет почты в папке %s.Есть старая почта в папке %s.Есть старая почта.Выберите пароль большей длиныДо смены пароля должно пройти больше времениСрок действия учетной записи истек; обратитесь к системному администраторуизменения только в регистресодержит имя пользователясодержит слишком много повторяющихся символовсодержит слишком длинную последовательность одинаковых символовошибочный диалог (%d) не удалось инициировать PAM не удалось выполнить pam_set_item() является палиндромомявляется результатом чередованиясовпадает со старымслишком похож на старыйслишком простойуровень:учетная запись:регистрация: сбой при создании нового процесса: %mошибка выделения памятислишком мало символов различных типовроль:Linux-PAM-1.1.8/po/bn_IN.po0000644000000000000000000006104212216527617012101 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Runa Bhattacharjee , 2009. # Runa Bhattacharjee , 2007, 2008. # , 2012. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-02-28 10:38+0000\n" "Last-Translator: runa \n" "Language-Team: Bengali (India) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn_IN\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...সময় সমাপ্তির পথে...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...দুঃখিত, সময় সমাপ্ত!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "ত্রুটিপূর্ণ তথ্যবিনিময় (conversation) (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "পাসওয়ার্ড: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "নতুন %s%s পাসওয়ার্ড: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "নতুন %s%s পাসওয়ার্ড পুনরায় লিখুন: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "দুঃখিত, পাসওয়ার্ড দুটি এক নয়।" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s পুনরায় লিখুন" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "পাসওয়ার্ড পরিবর্তনের কর্ম পরিত্যাগ করা হয়েছে।" #: libpam/pam_item.c:311 msgid "login:" msgstr "লগ-ইন:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "সফল" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "গুরুতব সমস্যা - এই মুহূর্তে পরিত্যাগ করা হবে" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "মডিউল লোড করতে ব্যর্থ" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "চিহ্ন পাওয়া যায়নি" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "পরিসেবা মডিউলে সমস্যা" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "সিস্টেম সংক্রান্ত সমস্যা" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "মেমরি বাফার সংক্রান্ত সমস্যা" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "অনুমতি প্রদান করা হয়নি" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "অনুমোদন ব্যর্থ" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "অনুমোদন সংক্রান্ত তথ্য প্রাপ্ত করার জন্য পর্যাপ্ত প্রমাণ উপলব্ধ নেই" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "অনুমোদন পরিসেবা দ্বারা অনুমোদন সংক্রান্ত তথ্য উদ্ধার করা সম্ভব হয়নি" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "পটভূমিতে চলমান অনুমোদন ব্যবস্থায় ব্যবহারকারী পরিচিত নন।" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "পরিসেবায় উপলব্ধ সর্বাধিক প্রচেষ্টার সুযোগ সংখ্যা সমাপ্ত" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "অনুমোদনের টোকেন বৈধ নয়; নতুন টোকেন ব্যবহার করা আবশ্যক" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "ব্যবহারকারী অ্যাকাউন্টের মেয়াদ পূর্ণ হয়েছে" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "সুনির্দিষ্ট সেশানের জন্য কোনো এন্ট্রি নির্মাণ/অপসারণ করা সম্ভব নয়" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "অনুমোদন পরিসেবা দ্বারা প্রয়োজনীয় প্রমাণ উদ্ধার করা সম্ভব হয়নি" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "ব্যবহারকারীর পরিচয়প্রমাণের তথ্যের মেয়াদ পূর্ণ হয়েছে" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "ব্যবহারকারীর পরিচয়প্রমাণের তথ্য নির্ধারণ করতে ব্যর্থ" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "মডিউল সংক্রান্ত কোনো তথ্য উপস্থিত নেই" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item()-এ সঠিক মান প্রেরিত হয়নি" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Conversation অর্থাৎ তথ্য বিনিময়কালীন সমস্যা" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "অনুমোদন টোকেন ব্যবস্থাপনা করতে সমস্যা" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "অনুমোদন সংক্রান্ত তথ্য পুনরুদ্ধার করতে ব্যর্থ" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "অনুমোদন টোকেনের লক ব্যস্ত" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "অনুমোদন টোকেনের মেয়াদ পূর্তী ব্যবস্থা নিষ্ক্রিয়" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "পাসওয়ার্ড পরিসেবা দ্বারা প্রারম্ভিক পরীক্ষা ব্যর্থ" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "উৎপন্ন মান PAM dispatch দ্বারা অগ্রাহ্য করা হবে" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "মডিউল অজানা" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "অনুমোদন টোকেনের মেয়াদ পূর্ণ হয়েছে" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Conversation অর্থাৎ তথ্য বিনিময় প্রক্রিয়া একটি ইভেন্টের অপেক্ষায় রয়েছে" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "অ্যাপ্লিকেশন দ্বারা পুনরায় libpam আরম্ভ করা আবশ্যক" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "PAM সংক্রান্ত অজানা ত্রুটি" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "পুরোনোটির অনুরূপ" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "মেমরি বরাদ্দ করতে সমস্যা" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "উভমুখী শব্দ" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "শুধুমাত্র হরফের ছাঁদ পরিবর্তন করা হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "পুরোনো পাসওয়ার্ডের সমতূল্য" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "জটিল নয়" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "ঘোরানো হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "পর্যাপ্ত অক্ষর শ্রেণী উপস্থিত নেই" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "একই অক্ষর অত্যাধিক বার ক্রমাগত ব্যবহার করা হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:664 #, fuzzy msgid "contains too long of a monotonic character sequence" msgstr "একই অক্ষর অত্যাধিক বার ক্রমাগত ব্যবহার করা হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "কোনো রূপে ব্যবহারকারী নাম অন্তর্ভুক্ত হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "কোনো পাসওয়ার্ড উল্লিখিত হয়নি" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "পাসওয়ার্ড পরিবর্তন করা হয়নি" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "পাসওয়ার্ড ভাল নয়: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s বিফল: প্রস্থানকালীন কোড %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s বিফল: %d%s সিগনাল প্রাপ্ত" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s বিফল: অজানা অবস্থা 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s থেকে" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s -র উপর" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "সর্বশেষ লগ-ইন:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "নতুন অ্যাকাউন্টে স্বাগতম!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "সর্বশেষ বিফল লগ-ইন:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।" msgstr[1] "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s'-র ক্ষেত্রে অত্যাধিক লগ-ইন" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "কোনো মেইল নেই।" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "নতুন মেইল প্রাপ্ত।" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "পুরোনো মেইল রয়েছে।" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "মেইল রয়েছে।" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "%s ফোল্ডারে কোনো মেইল উপস্থিত নেই।" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "%s ফোল্ডারে নতুন মেইল উপস্থিত।" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "%s ফোল্ডারে পুরোনো মেইল উপস্থিত রয়েছে।" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "%s ফোল্ডারে মেইল উপস্থিত রয়েছে।" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "'%s' ডিরেক্টরি নির্মাণ করা হচ্ছে।" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "ডিরেক্টরি '%s' নির্মাণ ও আরম্ভ করতে ব্যর্থ।" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।" #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "ডিফল্ট Security Context %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "ভিন্ন role অথবা level লিখতে ইচ্ছুক কি?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "role: " #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "role %s-র জন্য কোনো ডিফল্ট type উপস্থিত নেই\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "level: " #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "বৈধ নিরাপত্তা সংক্রান্ত context নয়" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s-র বৈধ context প্রাপ্ত করতে ব্যর্থ" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Security Context %s ধার্য করা হয়েছে" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "কি নির্মাণের Context %s ধার্য করা হয়েছে" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM আরম্ভ করতে ব্যর্থ\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() করতে ব্যর্থ\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "লগ-ইন: fork করতে ব্যর্থ: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s-র STRESS পাসওয়ার্ড পরিবর্তন করা হচ্ছে।" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "নতুন STRESS পাসওয়ার্ড লিখুন: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "নতুন STRESS পাসওয়ার্ড পুনরায় লিখুন: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "নিশ্চায়ন কাল ভুল টাইপ করা হয়েছে; পাসওয়ার্ড পরিবর্তন করা হয়নি" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "সাময়িকরূপে অ্যাকাউন্ট লক করা হয়েছে (%ld সেকেন্ড অবশিষ্ট)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u ব্যর্থ লগ-ইনের ফলে অ্যাকাউন্ট লক করা হয়েছে" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "অনুমোদন সংক্রান্ত সমস্যা" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "পরিসেবা সংক্রান্ত সমস্যা" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "অজানা ব্যবহারকারী" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "অজানা সমস্যা" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset= এর জন্য ভুল সংখ্যা উল্লিখিত\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: অজানা বিকল্প %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: সব ব্যবহারকারীর জন্য শূণ্য-ভিন্ন মান ধার্য করতে ব্যর্থ\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "লগ-ইন বিফলতা সর্বশেষ বিফলতা চিহ্নিত স্থান থেকে\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "প্রবেশাধিকার প্রদান করা হয়েছে (%ld পূর্বে সর্বশেষ লগ-ইন করা হয়েছে)।" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "আপনার অ্যাকাউন্টের মেয়াদপূর্ণ হয়েছে; অনুগ্রহ করে সিস্টেম অ্যাডমিনিস্ট্রেটরের সাথে " "যোগাযোগ করুন।" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "আপনার পাসওয়ার্ড এই মুহূর্তে পরিবর্তন করা আবশ্যক (root দ্বারা কার্যকরী)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "আপনার পাসওয়ার্ড এই মুহূর্তে পরিবর্তন করা আবশ্যক (password-র মেয়াদ পূর্ণ হয়েছে)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "সতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবে" msgstr[1] "সতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবে" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "সতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবে" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS পাসওয়ার্ড পরিবর্তন করা সম্ভব হয়নি।" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "চিহ্নিত পাসওয়ার্ডের থেকে লম্বা পাসওয়ার্ড উল্লেখ করা আবশ্যক" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s-র পাসওয়ার্ড পরিবর্তন করা হচ্ছে।" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(বর্তমান) UNIX পাসওয়ার্ড: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "কিছু কাল পরে পাসওয়ার্ড পরিবর্তন করা সম্ভব হবে" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "নতুন UNIX পাসওয়ার্ড উল্লেখ করুন: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "নতুন UNIX পাসওয়ার্ড পুনরায় লিখুন: " #~ msgid "Would you like to enter a security context? [N] " #~ msgstr "নিরাপত্তা সংক্রান্ত context উল্লেখ করতে ইচ্ছুক কি? [N] " Linux-PAM-1.1.8/po/hu.gmo0000644000000000000000000002722212216527620011670 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % !#!=%_>J{)CO6G8./L^U' ) ?F    0 @ !)J!"t!!*!!"!,"A"V"v";""A"X*#A#,#%#$41$f$z$($$+$ $$%'%%=%c%0%0%% %& &"&>& ]&(~&&'& && 'K'c'J')D(7n(#((((")-*)CX)?)a)0>*7o*+*A*M+c++++++,,96,Zp,#,+,0-,L-y- -- ----.". ).#3.W.r..,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-01-08 15:13+0000 Last-Translator: Zoltan Hoppár Language-Team: Hungarian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hu Plural-Forms: nplurals=2; plural=(n != 1); %Y. %b %e, %a %H:%M:%S %Z innen: %.*s, %.*s%s hiba: %d%s jelzés érzékelve%s hiba: kilépő kód %d%s hiba: 0x%x ismeretlen állapot%s: Rossz szám a --reset= opcióban %s: Nem állítható vissza minden felhasználó nem-nullára %s: %s ismeretlen opció %s: [--file rooted-fájlnév] [--user használó] [--reset[=n]] [--quiet] %s: [-f rooted-fájlnév] [--file rooted-fájlnév] [-u használó] [--user használó] [-r] [--reset[=n]] [--quiet] A (jelenlegi) UNIX jelszó: ...Sajnos lejárt az idő! ...Fogy az idő... Hozzáférés megadva (utolsó hozzáférés %ld másodperce volt).Felhasználói azonosító zárolva, többszöri, %u sikertelen belépés miattFelhasználói azonosító átmenetileg zárolt (még %ld másodpercig)Az alkalmazásnak újra meg kell hívnia a libpam modultHitelesítési hibaHitelesítési hibaA hitelesítő adatok nem állíthatók helyreA hitelesítési szolgáltatás nem tudja lekérni a hitelesítési adatokatA hitelesítő szolgáltatás nem tudja lekérni a felhasználó hitelesítő adataitHitelesítő token lejárat kikapcsolvaA hitelesítő token lejártA hitelesítési token már nem érvényes; újra van szükségHitelesítő token zár foglaltHitelesítő tokenkezelés hibaROSSZ JELSZÓ: %sRossz elem lett átadva a pam_*_item() számáraNem készíthető/törölhető bejegyzés az adott munkamenethez%s STRESS jelszavának megváltoztatása.%s jelszavának megváltoztatása.Kommunikációs hibaA kommunikáció egy eseményre várakozik"%s" mappa létrehozása.Kritikus hiba - azonnali leállásAlapértelemezett %s biztonsági környezet Új STRESS jelszó: Adja meg az új UNIX jelszót: Hiba a szervizmodulbanA jelszószolgáltatás előzetes ellenőrzésén megbukottA modul betöltése sikertelenHiba a felhasználó hitelesítő adatainak beállítása közbenElérte a szolgáltatás által engedélyezett újrapróbálkozások maximális számátElégtelen azonosító adat a hitelesítési adatok eléréséhez%s kulcskészítő környezet hozzárendelveUtolsó sikertelen belépés:%s %s %sUtolsó belépés:%s%s%sBelépés Hibák Utolsó hibák Innen Memóriapuffer-hibaA modul ismeretlenNIS jelszót nem sikerült módosítani.Új %s%sjelszó: Nincs alapértelmezett típus %s szerephez Nincs levél.Nem található modulspecifikus adatNincs jelszó megadvaNem érvényes biztonsági környezetJelszó változtatás elvetve.A jelszót már használta. Válasszon másikat.A jelszót már használta. Válasszon másikat.Változatlan jelszóJelszó: Engedély megtagadvaIsmét %sIsmét az új %s%sjelszó: Ismét az új STRESS jelszó: Írja be újra a UNIX jelszót: %s biztonsági környezet hozzárendelveSzolgáltatás hibaSajnálom, de a jelszavak nem egyeznek.SikerültA szimbólum nem találhatóRendszerhibaA PAM elosztónak a visszatérési értéket figyelmen kívül kell hagynia%d sikertelen belépés kísérlet volt az utolsó sikeres belépés óta.%d sikertelen belépés kísérlet volt az utolsó sikeres belépés óta.%d sikertelen belépés kísérlet volt az utolsó sikeres belépés óta.Túl sok bejelentkezés "%s" részéről.„%s” mappa nem hozható létre és állítható be.Nincs meg %s érvényes környezeteIsmeretlen PAM hibaIsmeretlen hibaIsmeretlen felhasználóFelhasználói azonosító lejártA felhasználó hitelesítő adatai lejártakAz alsóbb szintű hitelesítési modul nem ismeri a felhasználótAz ellenőrző elgépelve; a jelszó nem került módosításraFigyelmeztetés: a jelszava %d nap múlva lejárFigyelmeztetés: a jelszava %d nap múlva lejárFigyelmeztetés: a jelszava %d nap múlva lejárÜdvözöljük az új felhasználói azonosítójával!Kíván más szerepet vagy szintet megadni?Azonnal meg kell változtatnia a jelszavát (a jelszó elévült)Azonnal meg kell változtatnia a jelszavát (rendszergazda által erőltetve)%s mappában levelek vannak.Önnek levele van.%s mappában új levél van.Új levele érkezett.%s mappában nincs levél.%s mappában régi levél van.Régebbi levelei vannak.Válasszon hosszabb jelszótTovább kell várnia míg megváltoztathatja a jelszavátA felhasználói azonosító érvényessége lejárt; kérem keresse meg a rendszergazdátcsak a kis/nagybetűkben változottvalahogy tartalmazza a felhasználó nevéttúl hosszú monoton karaktersorozatot tartalmaztúl sok egymást követő betű egyezik meghibás beszélgetés (%d) PAM inicializálása sikertelen pam_set_item() meghiúsult palindromforgatvaugyanaz, mint a régitúl hasonló a régiheztúl egyszerűszint:belépő:bejelentkezés: elágazás hiba: %mmemória allokációs hibaelégtelen betűcsoportszerep:Linux-PAM-1.1.8/po/or.gmo0000644000000000000000000004463612216527620011704 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %  8XQ;S:3G.uvWnD3} !l!""")"gL""E##E$$L_%e%6&OI&&YV'R'"(X&(P(d(`5)X)V)2F*y*H*eD++s,g,3g-&-^-/!./Q._.9.///a/k60_01s11T2'"3+J3Av3x3z14x4Z%55f5656G6g6168J88X99:":L<:O:u:O; ;<Y==>o?X8@?@b@Y4AnAkAbiBvBCCCdD_ EYEkE=FFSF2Fd G5pGfGp H'~H H H9HDHHAII,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-15 14:35+0000 Last-Translator: Manoj Kumar Giri Language-Team: Oriya (http://www.transifex.com/projects/p/fedora/language/or/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: or Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y %.*s ରୁ %.*s ରେ%s ବିଫଳ: %d%s ସଙ୍କେତ ପାଇଲା%s ବିଫଳ: %d ସଙ୍କେତରୁ ପ୍ରସ୍ଥାନ କରୁଅଛି%s ବିଫଳ: ଅଜଣା ଅବସ୍ଥିତି 0x%x%s: --reset= ପାଇଁ ଖରାପ ସଂଖ୍ଯା ଦିଆଯାଇଛି %s: ସମସ୍ତ ଚାଳକ ମାନଙ୍କୁ ଶୂନ୍ଯ ବିହୀନ ଭାବରେ ପୁନର୍ବାର ବିନ୍ଯାସ କରିପାରିବ ନାହିଁ %s: ଅଚିହ୍ନିତ ବିକଳ୍ପ %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (ବର୍ତ୍ତମାନ ଥିବା) UNIX ପ୍ରବେଶ ସଙ୍କେତ: ...କ୍ଷମା କରିବେ, ଆପଣଙ୍କ ସମୟ ସମାପ୍ତ ହୋଇଯାଇଛି! ...ସମୟ ସମାପ୍ତ ହେଉଛି... ଅଭିଗମ୍ୟତା ଗ୍ରହଣୀୟ ହୋଇଛି (ଅନ୍ତିମ ଅଭିଗମ୍ୟତା %ld ସେକଣ୍ଡ ପୂର୍ବରୁ)।%u ବିଫଳ ଲଗଇନ କାରଣରୁ ଖାତା ଅପରିବର୍ତ୍ତନୀୟ ହୋଇଯାଇଛିଖାତା ଅସ୍ଥୟୀ ଭାବରେ ଅପରିବର୍ତ୍ତିତ ହୋଇଛି (%ld ସେକଣ୍ଡ ବଳିଅଛି)ପ୍ରୟୋଗ libpam କୁ ପୁନର୍ବାର ଆହ୍ବାନ କରିବା ଦରକାରବୈଧିକରଣ ତୃଟିବୈଧିକରଣ ବିଫଳବୈଧିକରଣ ସୂଚନା ପୁନର୍ଲାଭ କରିପାରିବ ନାହିଁବୈଧିକରଣ ସେବା ବୈଧିକରଣ ସୂଚନା ପୁନରୁଦ୍ଧାର କରିପାରିବ ନାହିଁବୈଧିକରଣ ସେବା ଚାଳକ ପ୍ରମାଣ ପତ୍ର ମାନଙ୍କୁ ପୁନରୁଦ୍ଧାର କରିପାରିବ ନାହିଁବୈଧିକରଣ ଟୋକନ କାଳ ବର୍ଦ୍ଧନ ପ୍ରକ୍ରିୟାକୁ ନିଷ୍କ୍ରିୟ କରାଯାଇଛିବୈଧିକରଣ ଟୋକନ ଅଚଳ ହୋଇଯାଇଛିବୈଧିକରଣ ଟୋକନ ଆଉ ଏବେ ବୈଧ ନୁହେଁ; ଗୋଟିଏ ନୂତନ ଟୋକନ ଆବଶ୍ଯକବୈଧିକରଣ ଟୋକନ ତାଲା ବ୍ଯସ୍ତ ଅଛିବୈଧିକରଣ ଟୋକନ ବ୍ଯବହାର କୌଶଳ ସାଧନରେ ତୃଟିଖରାପ ପ୍ରବେଶ ସଙ୍କେତ: %sଖରାପ ବସ୍ତୁକୁ pam_*_item() କୁ ପଠାଯାଇଛିଉଲ୍ଲେଖିତ ଅଧିବେଶନ ପାଇଁ ଗୋଟିଏ ପ୍ରବିଷ୍ଟି ପ୍ରସ୍ତୁତ/ଅପସାରଣ କରିପାରିବ ନାହିଁ%s ପାଇଁ STRESS ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଉଛି.%s ପାଇଁ ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଉଛି.କଥୋପକଥନ ତୃଟିକଥୋପକଥନ ଘଟଣା ପାଇଁ ଅପେକ୍ଷା କରୁଅଛିଡ଼ିରେକ୍ଟୋରୀ '%s' ନିର୍ମାଣ କରୁଅଛି.ଗୁରୁତର ତୃଟି - ଏହା ବିଷୟରେ ଶୀଘ୍ର ଜଣାନ୍ତୁପୂର୍ବନିର୍ଦ୍ଧାରିତ ସୁରକ୍ଷା ପ୍ରସଙ୍ଗ %s ନୂତନ STRESS ପ୍ରବେଶ ସଙ୍କେତ ଭରଣ କରନ୍ତୁ: ନୂତନ UNIX ପ୍ରବେଶ ସଙ୍କେତ ଭରଣ କରନ୍ତୁ: ସେବା ଏକକାଂଶରେ ତୃଟିପ୍ରବେଶ ସଙ୍କେତ ସେବା ଦ୍ବାରା ପ୍ରାଥମିକ ପରୀକ୍ଷଣ ବିଫଳଏକକାଂଶକୁ ଧାରଣ କରିବାରେ ବିଫଳଚାଳକ ପ୍ରମାଣ ପତ୍ର ବିନ୍ଯାସ କରିବାରେ ବିଫଳସେବା ପାଇଁ ସର୍ବାଧିକ ସଂଖ୍ଯକ ପୁନଃପ୍ରଚେଷ୍ଟା ପୂର୍ଣ୍ଣ ମାତ୍ରାରେ ସମାପ୍ତ ହୋଇଯାଇଛିବୈଧିକରଣ ତଥ୍ଯକୁ ଅଭିଗମ କରିବା ପାଇଁ ଅଯେଥଷ୍ଟ ପ୍ରମାଣ ପତ୍ରକି ନିର୍ମାଣ୍ଣ ପ୍ରସଙ୍ଗ %s ନ୍ଯସ୍ତ କରାଯାଇଛିଅନ୍ତିମ ବିଫଳ ଲଗଇନ:%s%s%sଅନ୍ତିମ ଲଗଇନ:%s%s%sଲଗଇନ ବିଫଳତାର ନୂତନତମ ବିଫଳତା ରୁ ସ୍ମୃତି ସଞ୍ଚୟ ତୃଟିଏକକାଂଶଟି ଅଜଣା ଅଟେNIS ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଇ ହେଲା ନାହିଁ।ନୂତନ %s%s ପ୍ରବେଶ ସଙ୍କେତ: ଭୂମିକା %s ପାଇଁ କୌଣସି ପୂର୍ବନିର୍ଦ୍ଧାରିତ ପ୍ରକାର ନାହିଁ କୌଣସି ଚିଠି ନାହିଁ।କୌଣସି ଏକକାଂଶ ନିର୍ଦ୍ଦିଷ୍ଟ ତଥ୍ଯ ନାହିଁକୌଣସି ପ୍ରବେଶ ସଙ୍କେତ ପ୍ରଦାନ କରାଯାଇ ନାହିଁଏହା ଗୋଟିଏ ବୈଧ ସୁରକ୍ଷା ପ୍ରସଙ୍ଗ ନୁହେଁପ୍ରବେଶ ସଙ୍କେତ ପରିବର୍ତ୍ତିନକୁ ପ୍ରତ୍ୟାଖାନ କରାଯାଇଛି।ପ୍ରବେଶ ସଙ୍କେତକୁ ପୂର୍ବରୁ ବ୍ୟବହାର କରାଯାଇଛି।ପ୍ରବେଶ ସଙ୍କେତଟି ପୂର୍ବରୁ ବ୍ଯବହୃତ ହେଉଛି। ଅନ୍ଯ ଗୋଟିଏ ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରନ୍ତୁ।ପ୍ରବେଶ ସଙ୍କେତ ଅପରିବର୍ତ୍ତିତ ଅଛିପ୍ରବେଶ ସଙ୍କେତ: ଅନୁମତି ଅସ୍ବୀକୃତ%sକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁନୂତନ %s%s ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: ନୂତନ STRESS ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: ନୂତନ UNIX ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: %s ସୁରକ୍ଷା ପ୍ରସଙ୍ଗ ନ୍ଯସ୍ତ କରାଯାଇଛିସେବା ତୃଟିକ୍ଷମା କରିବେ, ପ୍ରବେଶ ସଙ୍କେତ ମିଶୁ ନାହିଁ।ସଫଳତାପ୍ରତୀକ ମିଳିଲା ନାହିଁତନ୍ତ୍ର ତୃଟିଫେରସ୍ତ ମୂଲ୍ଯକୁ PAM ପ୍ରେରଣ ଦ୍ବାରା ଆଗ୍ରହ୍ଯ କରାଯାଇଛିଅନ୍ତିମ ସଫଳ ଲଗଇନ ପରଠାରୁ %d ଟି ବିଫଳ ଲଗଇନ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି।ଅନ୍ତିମ ସଫଳ ଲଗଇନ ପରଠାରୁ %d ଟି ବିଫଳ ଲଗଇନ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି।ଅନ୍ତିମ ସଫଳ ଲଗଇନ ପରଠାରୁ %d ଟି ବିଫଳ ଲଗଇନ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି।'%s' ପାଇଁ ଅତ୍ଯଧିକ ସଂଖ୍ଯକ ଲଗଇନ।ଡ଼ିରେକ୍ଟୋରୀ '%s'କୁ ନିର୍ମାଣ ଏବଂ ପ୍ରାରମ୍ଭ କରିବାରେ ଅସମର୍ଥ।%s ପାଇଁ ବୈଧ ପ୍ରସଙ୍ଗ ପାଇବାରେ ଅସମର୍ଥଅଜଣା PAM ତୃଟିଅଜଣା ତୃଟିଅଜଣା ଚାଳକଚାଳକ ହିସାବ ଖାତା ଅଚଳ ହୋଇଯାଇଛିଚାଳକ ପ୍ରମାଣ ପତ୍ର ଅଚଳ ହୋଇଯାଇଛିନିମ୍ନଲିଖିତ ବୈଧିକରଣ ଏକକାଂଶକୁ ଜଣା ନ ଥିବା ଚାଳକଯାଞ୍ଚକରଣ ସମୟରେ ଭୂଲ ଟାଇପ କରିଛନ୍ତି, ପ୍ରବେଶ ସଙ୍କେତଟି ବଦଳି ନାହିଁଚେତାବନୀ: ଆପଣଙ୍କ ପ୍ରବେଶ ସଙ୍କେତ %d ଦିନରେ ଅକାମି ହୋଇଯିବଚେତାବନୀ: ଆପଣଙ୍କ ପ୍ରବେଶ ସଙ୍କେତ %d ଦିନରେ ଅକାମି ହୋଇଯିବଚେତାବନୀ: ଆପଣଙ୍କ ପ୍ରବେଶ ସଙ୍କେତ %d ଦିନରେ ଅକାମି ହୋଇଯିବଆପଣଙ୍କ ନୂତନ ଖାତାରେ ଆପଣଙ୍କ ସ୍ବାଗତ!ଆପଣ ଭିନ୍ନ ଏକ ଭୂମିକା କିମ୍ବା ସ୍ତର ଭରଣ କରିବା ପାଇଁ ଚାହୁଁଛନ୍ତି କି?ଆପଣ ଆପଣଙ୍କର ପ୍ରବେଶ ସଙ୍କେତକୁ ଯଥାଶୀଘ୍ର ବଦଳାଇବା ଆବଶ୍ଯକ (ପ୍ରବେଶ ସଙ୍କେତ ବହୁତ ପୁରୁଣା ହୋଇଯାଇଛି)ଆପଣ ଆପଣଙ୍କର ପ୍ରବେଶ ସଙ୍କେତକୁ ଯଥାଶୀଘ୍ର ବଦଳାଇବା ଆବଶ୍ଯକ (ରୁଟ ହେବା ବାଧ୍ଯତାମୂଳକ)ଆପଣଙ୍କ ନିକଟରେ %s ଫୋଲଡରରେ ଚିଠି ଅଛି।ଆପଣଙ୍କ ନିକଟରେ ଚିଠି ଅଛି।ଆପଣଙ୍କ ନିକଟରେ %s ଫୋଲଡରରେ ନୂଆ ଚିଠି ଅଛି।ଆପଣଙ୍କ ପାଇଁ ଗୋଟିଏ ନୂଆ ଚିଠି ଆସିଛି।ଆପଣଙ୍କ ନିକଟରେ %s ଫୋଲଡରରେ କୌଣସି ଚିଠି ନାହିଁ।ଆପଣଙ୍କ ନିକଟରେ %s ଫୋଲଡରରେ ପୁରୁଣା ଚିଠି ଅଛି।ଆପଣଙ୍କ ନିକଟରେ ଗୋଟିଏ ପୁରୁଣା ଚିଠି ଅଛି।ଆପଣ ଗୋଟିଏ ଲମ୍ବା ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରିବା ଉଚିତପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଇବା ପାଇଁ ଆପଣ ଅଧିକ ସମୟ ଅପେକ୍ଷା କରିବା ଉଚିତଆପଣଙ୍କର ଖାତା ଅଚଳ ହୋଇଯାଇଛି; ଦୟାକରି ଆପଣଙ୍କ ତନ୍ତ୍ର ପ୍ରଶାସକଙ୍କ ସହିତ ଯୋଗାଯୋଗ କରନ୍ତୁକେବଳ ଅକ୍ଷର ପ୍ରକାର ପରିବର୍ତ୍ତିତ ହୋଇଥାଏଚାଳକ ନାମକୁ କୌଣସି ଉପାୟରେ ଧାରଣ କରିଥାଏନିରସ ବର୍ଣ୍ଣର ବଡ଼ କ୍ରମ ଧାରଣ କରିଅଛିଅତ୍ୟଧିକ ସମାନ ଅକ୍ଷରକୁ ଲଗାତାର ଧାରଣ କରିଥାଏତୃଟିପୂର୍ଣ୍ଣ କଥୋପକଥନ (%d) PAM କୁ ପ୍ରାରମ୍ଭିକୃତ କରିବାରେ ବିଫଳ pam_set_item() କରିବାରେ ବିଫଳ ପ୍ରବେଶ ସଙ୍କେତଟି ଗୋଟିଏ ପାଲିନଡ୍ରୋମ ଅଟେଏହା ଘୂର୍ଣ୍ଣୟମାନ ଅଟେପୁରୁଣା ପ୍ରବେଶ ସଙ୍କେତ ସହିତ ଏହା ସମାନ ଅଟେଏହା ପୂର୍ବ ପ୍ରବେଶ ସଙ୍କେତ ସହିତ ବହୁତ ସମାନ ଅଟେଏହା ଅତି ସହଜ ଅଟେସ୍ତର:ଲଗଇନ:ଲଗଇନ: fork କରିବାରେ ବିଫଳ: %mସ୍ମୃତିସ୍ଥାନ ବଣ୍ଟନ ତ୍ରୁଟିଯଥେଷ୍ଟ ବର୍ଣ୍ଣ ଶ୍ରେଣୀ ନାହିଁଭୂମିକା:Linux-PAM-1.1.8/po/gl.gmo0000644000000000000000000000076212216527620011656 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Galician (http://www.transifex.com/projects/p/fedora/language/gl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: gl Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/zu.gmo0000644000000000000000000002027512216527621011714 00000000000000[ !&?G[& 0 .G :v 7 #  9* d '   5  !% G h   ,  4 6O    "   "  5 /R       !/NV g2t  6 *WDD)ETt!,B(k}  "07R 8SQG '+S%n*;='9e.81*9d&6$"- Pq4+,D@_%*32Cv'1 (&&O$v!  9/V,,6">Y&JP [ r} -;,Th+$ B Q _ o  " :<P740*Y &I"9L-FOH,5G+D W;=J(RNZ% MCT!U/@X [?6'S BV>823)#1KEQ.A$ %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionConversation errorConversation is waiting for eventCritical error - immediate abortEnter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataLast login:%s%s%sMemory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword has been already used. Choose another.Password unchangedPassword: Permission deniedRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchToo many logins for '%s'.Unknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWelcome to your new account!You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelogin:login: failure forking: %mProject-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:57+0000 Last-Translator: Tomáš Mráz Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zu Plural-Forms: nplurals=2; plural=(n != 1) %a %b %e %H:%M:%S %Z %Ykusukela %.*sku-%.*s%s: Inombolo eyiphutha enikeziwe ukuba --uqale kabusha= %s: Ayikwazi ukusetha kabusha bonke abasebenzisi ibase enombolweni ongelona iqanda %s: Okukhethile okungaziwa %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] Iphasiwedi ye-UNIX (yamanje): ...Uxolo, isikhathi sakho sesiphelile! ...Isikhathi siyaphela... Uhlelo ludinga ukubiza i-libpam futhiIphutha lokugunyazaUkwehluleka kokugunyazaUkwaziswa kokugunyaza akukwazi ukubuyisekaIsevisi yokugunyaza ayikwazi ukulanda ukwaziswa kokugunyazaIsevisi yokugunyaza ayikwazi ukulanda izinhlamvu zomsebenzisiUkuphela kwesikhathi sesiqinisekiso sokugunyaza kucishiweIsiqinisekiso sokugunyaza siphelelwe isikhathiIsiqinisekiso sokugunyaza asisasebenzi, kudingeka esishaIsihluthulelo sesiqinisekiso sokugunyaza simatasaIphutha lokufaka isiqinisekiso sokugunyazaIPHASIWEDI ENGASEBENZI: %sInto embi idluliselwe kwi-pam_*_item()Ayikwazi ukwakha/ukususa okufakiwe kohlelo olubonisiweIphutha lengxoxoIngxoxo ilinde isenzakaloIphutha elibucayi - yeka ngokusheshaFaka iphasiwedi entsha ye-STRESS: Faka iphasiwedi entsha ye-UNIX: Iphutha kwimoduli yesevisiUkuhlola kokuqala okuhlulekile ngesevisi yephasiwediIhlulekile ukunezela umkhiqizo owenezelwayoUkwehluleka ukusetha izinhlamvu zomsebenzisiIsifinyelele ekugcineni kwezikhathi ezivumelekile zokuzama le sevisiIzinhlamvu zamagama ezinganele zokungena ekwazisweni kokugunyazaUkungena kokugcina:%s%s%sIphutha lengobo yesikhashana yememoriImoduli ayaziwaIphasiwedi ye-NIS ayivumanga ukushintshwa.%s%siphasiwedi entsha: Ayikho imeyili.Akukho ukwaziswa okuthile kwemoduli okutholakalayoAyikho iphasiwedi enikeziweAkuyona indawo yokuphepha esemthethweniLe phasiwedi isetshenziswa ngothile. Khetha enye.Iphasiwedi ayishintshwangaIphasiwedi: Imvume inqatshiweThayipha kabusha %s%siphasiwedi entsha: Thayipha iphasiwedi entsha ye-STRESS: Thayipha iphasiwedi entsha ye-UNIX: Indawo %s Yokuphepha YabelweIphutha lesevisiUxolo, amaphasiwedi awahambelani.ImpumeleloUphawu alutholakaliIphutha lesistimuI-value yokubuyisa kufanele inganakwa ukuthumela kwe-PAM Kuningi kakhulu ukungena kwi- '%s' osekwenziwe.Iphutha le-PAM elingaziwaIphutha elingaziwaUmsebenzisi ongaziwaI-akhawunti yomsebenzisi iphelelwe isikhathiIzinhlamvu zomsebenzisi ziphelelwe isikhathiUmsebenzisi akaziwa kwimoduli yokugunyaza engabonakaliUkufakazela akuthayiphiwanga kahle; iphasiwedi ayishintshwangaUyamukelwa kwi-akhawunti yakho entsha!Kudingeka ukuba ushintshe iphasiwedi yakho ngokushesha (iphasiwedi indala)Kudingeka ukuba ushintshe iphasiwedi yakho ngokushesha (iphoqelelwa ngumqondisi)Unemeyili kwifolda %s.Unemeyili.Unemeyili entsha kwifolda %s.Unemeyili entsha.Akukho meyili onayo kwifolda %s.Unemeyili endala kwifolda %s.Unemeyili endala.Kumelwe ukhethe iphasiwedi ethe ukuba yinjanaKumelwe ulinde isikhashana ukuze ushintshe iphasiwedi yakhoI-akhawunti yakho isiphelelwe isikhathi, sicela uthintana nomqondisi wesistimu yakhokushintshe onobumba kuphelaingxoxo enephutha (%d) Ihlulekile ukulungiselela ukuqalisa i-PAM Ihlulekile ukwenza i-pam_set_item() iyi-palindromeijikelezisiweiyafana nendalaifana kakhulu nendalailula kakhulungena:ngena: Ihlulekile ukuhlukanisa: %mLinux-PAM-1.1.8/po/cs.po0000644000000000000000000004341712216527617011527 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Klara Cihlarova , 2005, 2006. # , 2011. # Tomas Mraz , 2005, 2008, 2009. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 12:14+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: Czech (http://www.transifex.net/projects/p/fedora/language/" "cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "..Odpočet byl spuštěn...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Čas vypršel!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "nesprávná konverzace (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Heslo: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nové %s%sheslo: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Opakujte nové %s%sheslo: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Hesla se neshodují." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Opakujte %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Změna hesla přerušena." #: libpam/pam_item.c:311 msgid "login:" msgstr "login:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Úspěch" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritická chyba - okamžité ukončení" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Nepodařilo se nahrát modul" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbol nenalezen" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Chyba v modulu služby" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Chyba systému" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Chyba alokace paměti" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Přístup zamítnut" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Selhání autentizace" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Nedostatečná oprávnění pro přístup k autentizačním datům" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Autentizační služba nemůže získat informace pro autentizaci" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Uživatel není znám použitému autentizačnímu modulu" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Vyčerpán maximální počet pokusů pro službu" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Autentizační token již není platný; vyžadován nový" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Uživatelský účet vypršel" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Pro zadané sezení nelze vytvořit/odstranit záznam" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Autentizační služba nemůže získat údaje o oprávněních uživatele" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Údaje o oprávněních uživatele vypršely" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Chyba při nastavení údajů o oprávněních uživatele" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Nelze najít data potřebná pro modul" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Funkci pam_*_item() byla předána špatná položka" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Chyba konverzace" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Chyba manipulace s autentizačním tokenem" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Autentizační informace nelze získat" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Autentizační token je uzamčen" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Stárnutí autentizačního tokenu zakázáno" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Selhání předběžné kontroly ve službě hesla" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Návratová hodnota by měla být ignorována rozhodovacím mechanismem PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Neznámý modul" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Autentizační token vypršel" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Konverzace čeká na událost" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Aplikace musí znovu zavolat libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Neznámá chyba PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "je stejné jako předcházející" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "chyba alokace paměti" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "je palindrom" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "pouze mění velikost" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "je příliš podobné předcházejícímu" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "je příliš jednoduché" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "je posunuté" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "nemá dostatek různých druhů znaků" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "obsahuje příliš mnoho stejných znaků za sebou" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "obsahuje příliš dlouhou postupnou sekvenci znaků" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "obsahuje v nějaké formě uživatelské jméno" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Nezadáno heslo" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Heslo nebylo změněno" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ŠPATNÉ HESLO: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s selhal: návratový kód %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s selhal: dostal signál %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s selhal: neznámý kód stavu 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %d.%m.%Y %H:%M:%S %Z" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " z %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " na %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Poslední přihlášení:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Vítejte na vašem novém účtu!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Poslední neúspěšné přihlášení:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "Od posledního úspěšného došlo k %d neúspěšnému pokusu o přihlášení." msgstr[1] "Od posledního úspěšného došlo k %d neúspěšným pokusům o přihlášení." msgstr[2] "Od posledního úspěšného došlo k %d neúspěšným pokusům o přihlášení." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "Od posledního úspěšného došlo k %d neúspěšným pokusům o přihlášení." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Příliš mnoho přihlášení pro '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Žádná pošta." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Máte novou poštu." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Máte starou poštu." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Máte poštu." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Nemáte žádnou poštu ve složce %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Máte novou poštu ve složce %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Máte starou poštu ve složce %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Máte poštu ve složce %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Vytváření adresáře '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Nezdařilo se vytvořit a inicializovat adresář '%s'." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Heslo již bylo použito. Zvolte jiné." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Heslo již bylo použito." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Výchozí bezpečnostní kontext %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Chcete zadat jinou roli nebo úroveň?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "role:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Chybí výchozí typ pro roli %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "úroveň:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Neplatný bezpečnostní kontext" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Nezdařilo se najít platný bezpečnostní kontext pro %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Bezpečnostní kontext %s přidělen" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Bezpečnostní kontext pro vytváření klíčů %s přidělen" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "chyba při inicializaci PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "chyba pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: chyba forku: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Změna STRESS hesla pro %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Zadejte nové STRESS heslo: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Opakujte nové STRESS heslo: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Chybné potvrzení. Heslo nezměněno" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Účet dočasně uzamčen (zbývá %ld vteřin)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Účet uzamčen z důvodu %u neúspěšných pokusů o přihlášení" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Chyba autentizace" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Chyba služby" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Neznámý uživatel" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Neznámá chyba" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Zadána špatná hodnota --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Neznámá volba %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file jmeno_souboru] [--user uzivatelske_jmeno] [--reset[=n]] [--" "quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Nelze resetovat všechny uživatele nenulově\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Selhání Poslední selhání Od\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f plna-cesta-k-souboru] [--file plna-cesta-k-souboru]\n" " [-u uzivatelske-jmeno] [--user uzivatelske-jmeno]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Přístup povolen (poslední přístup před %ld vteřinami)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Váš účet vypršel; kontaktujte prosím svého správce systému" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Musíte okamžitě změnit své heslo (vynuceno rootem)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Musíte okamžitě změnit své heslo (heslo vypršelo)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Varování: Vaše heslo vyprší za %d den" msgstr[1] "Varování: Vaše heslo vyprší za %d dny" msgstr[2] "Varování: Vaše heslo vyprší za %d dní" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Varování: Počet dní do vypršení hesla: %d" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS heslo se nepodařilo změnit." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Musíte zvolit delší heslo" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Změna hesla pro %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(současné) UNIX heslo: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Na změnu svého hesla musíte počkat déle" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Zadejte nové UNIX heslo: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Opakujte nové UNIX heslo: " Linux-PAM-1.1.8/po/eu.po0000644000000000000000000003256612216527617011536 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Asier Iturralde Sarasola , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-12-24 13:54+0000\n" "Last-Translator: Asier Iturralde Sarasola \n" "Language-Team: Basque (http://www.transifex.com/projects/p/fedora/language/" "eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Pasahitza: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "%s%sPasahitz berria: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Idatzi berriz %s%spasahitz berria: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Idatzi berriz %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Sistemaren errorea" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "maila:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Errore ezezaguna" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/ja.po0000644000000000000000000004576412216527617011523 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Jiro Matsuzawa , 2013 # Kiyoto Hashida , 2008-2009 # Noriko Mizumoto , 2007 # Tomoyuki KATO , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-05-07 12:44+0000\n" "Last-Translator: Jiro Matsuzawa \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...時間が切れかかっています...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...時間切れです。\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "誤った会話(%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "パスワード:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "新しい%s%sパスワード:" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "新しい%s%sパスワードを再入力してください:" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "パスワードが一致しません。" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s を再入力して下さい" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "パスワードの変更は放棄されました" #: libpam/pam_item.c:311 msgid "login:" msgstr "ログイン:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "成功" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "致命的エラー - 直ちに中止してください" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "モジュールのロードに失敗しました" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "記号が見つかりません" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "サービスモジュールのエラー" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "システムエラー" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "メモリーバッファエラー" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "拒否されたパーミッション" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "認証失敗" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "認証データにアクセスする資格認定がありません" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "認証サービスが認証情報を検索できません" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "基礎となる認証モジュールを知らないユーザー" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "サービスの最大試行回数に達しました" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "認証トークンはもはや有効ではありません。新しい認証トークンが必要です" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "ユーザーアカウントの有効期限が切れました" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "指定したセッションに対するエントリを作成/削除できません" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "認証サービスがユーザー資格認定を検索できません" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "ユーザー資格認定の有効期限切れ" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "ユーザー資格認定の設定に失敗しました" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "モジュール固有データがありません" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item()に渡された不正項目" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "会話エラー" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "認証トークン操作エラー" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "認証情報を回復できません" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "認証トークンをロック中です" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "認証トークンエージングが無効です" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "パスワードサービスによる予備チェックに失敗しました" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "戻り値は PAM タスク指名により無視する必要があります" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "モジュールが不明です" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "認証トークンの有効期限切れです" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "会話はイベントを待っています" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "アプリケーションはlibpamを再び呼び出す必要があります" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "不明な PAM エラー" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "パスワードが古いものと同じです。" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "メモリー割り当てエラー" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "前後どちらから読んでも同じパスワードです。" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "大文字小文字を変えただけのパスワード" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "古いものと似ています" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "簡単すぎます" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "回転しています" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "文字クラスが不十分です" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "連続的な同一文字が多く含まれ過ぎです" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "単調な文字列が数多く含まれています" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "なんらかの形式のユーザー名を含みます" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "パスワードが与えられていません" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "パスワードが変更されていません" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "よくないパスワード: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s 失敗: 終了コード %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s 失敗: シグナルをキャッチ %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s 失敗: 不明な状態 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %Y/%m/%d (%a) %H:%M:%S %Z" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*sから開始" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "日時 %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "最終ログイン:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "新しいアカウントへようこそ。" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "最後の失敗ログイン:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "最後の正しいログインの後に %d 回の失敗ログインの試行があります" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "最後の正しいログインの後に %d 回の失敗ログインの試行があります。" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s'のログイン数が多すぎます。" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "メールがありません。" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "新しいメールがあります。" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "古いメールがあります。" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "メールがあります。" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "フォルダ%sにメールがありません。" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "フォルダ%sに新しいメールがあります。" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "フォルダ%sに古いメールがあります。" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "フォルダ%sにメールがあります。" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "ディレクトリ '%s' を作成中" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "ディレクトリ %s を作成して初期化できません。" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" "パスワードはすでに使用されています。 別のパスワードを選択してください。" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "パスワードはすでに使用されています。" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "デフォルトセキュリティコンテキスト%s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "異なるロール又はレベルを入力しますか?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ロール:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "ロール %s にはデフォルトタイプがありません\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "レベル:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "有効なセキュリティコンテキストでありません" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s の為の有効なコンテキストを取得できません" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "割り当てられたセキュリティコンテキスト%s" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "キー作成コンテキスト %s が割り当てられました" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAMの初期化に失敗しました\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item()に失敗しました\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "ログイン: いまいましい失敗: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s 用の STRESS パスワードを変更中" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "新しいSTRESSパスワードを入力してください:" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "新しいSTRESSパスワードを再入力してください:" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "ミスタイプの確認、パスワードが変更されていません" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "アカウントは一時的にロックされています (残り %ld 秒)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u のログイン失敗の理由で アカウントはロックされました" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "認証エラー" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "サービスエラー" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "不明なユーザー" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "不明なエラー" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: 不正番号が--reset=に与えられました\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: 未認識オプション%s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: すべてのユーザーを非ゼロにリセットできません\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "ログイン 失敗。最後の失敗は 以下で発生\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "アクセスを許可 (最後のアクセスは %ld 秒前でした)" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "アカウントの有効期限が切れました。システム管理者にお問い合わせください。" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "パスワードを直ちに変更する必要があります(強制されたルート)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "パスワードを直ちに変更する必要があります(古いパスワード)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "警告: パスワードは%d日で有効期限が切れます。" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "警告: パスワードは %d 日で有効期限が切れます。" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS パスワードを変更できませんでした。" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "長いパスワードを選択する必要があります" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s 用にパスワードを変更中" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "現在の UNIX パスワード:" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "パスワードを変更するには長く待つ必要があります" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "新しい UNIX パスワードを入力してください:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "新しい UNIX パスワードを再入力してください:" Linux-PAM-1.1.8/po/te.gmo0000644000000000000000000004353512216527620011671 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %P(HyMN_?G;u=W72so lx!(!."Y=""'#]#M $qY$]$`)%/%Z%&]&V'%l'G'@'V(Br(e(c)D))VG*l* ++i!,E,),,/-4-U-1?.jq. .S.MQ/J/V/fA007W11@1-1b2k2j2VV33[3 #4.04%_4|4p5s6O377r28)8%878S-9_99v:;;C<<z=>v>H>H?X?z(@@R#A}vAAB;>ClzC|C|dD4DKE+bE!E+EEYE+VFFFF%F`FLG,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-30 11:58+0000 Last-Translator: sudheesh001 Language-Team: Telugu (http://www.transifex.com/projects/p/fedora/language/te/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: te Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y %.*s నుండి %.*s పైన%s విఫలమైంది: సంకేతము %d%s పొదింది%s విఫలమైంది: బహిష్కరణ కోడ్ %d%s విఫలమైంది: తెలియని స్థితి 0x%x%s:చెడ్డ సంఖ్య యివ్వబడింది --reset= %s: వినియోగదారులనందరిని సున్నా-కానిదానికి తిరిగివుంచలేము %s: గుర్తించని ఐచ్చికము %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (ప్రస్తుత) UNIX సంకేతపదము: ...క్షమించాలి, మీ సమయం అయిపోయింది! ...సమయం అయిపోతోంది... యాక్సిస్ యివ్వబడింది (చివరిగా యాక్సిస్ చేసినది %ld సెకనుల క్రితం).%u లాగిన్‌ల వైఫల్యం కారణంగా ఖాతా లాక్అయిందిఖాతా తాత్కాలికంగా లాక్‌చేయబడింది (%ld సెకనులు మిగిలినవి)libpamను అనువర్తనము మరలా కాల్‌చేయవలసివుందిదృవీకరణం దోషముదృవీకరణ వైఫల్యముదృవీకరణ సమాచారము తిరిగిపొందబడదుదృవీకరణ సేవ దృవీకరణ సమాచారమును వెలికితీయలేక పోయిందిదృవీకరణ సేవ వినియోగదారి ఆనవాళ్ళను వెలికితీయలేదుదృవీకరణ టోకెన్ యేజింగ్ అచేతనమైందిదృవీకరణ టోకెన్ కాలముతీరినదిదృవీకరణ టోకెన్ అవసరములేదు, కొత్తది అవసరముదృవీకరణ టోకెన్ లాక్ బ్యుజీగావుందిదృవీకరణ టోకెన్ మానిప్యులేషన్ దోషముచెడ్డ సంకేతపదము: %spam_*_item() ద్వారా చెడ్డఅంశము వెళ్ళిందితెలుపబడి సెషన్‌కు యెటువంటి ప్రవేశమును చెయలేవు/తొలగించలేవుSTRESS సంకేతపదమును %sకొరకు మార్చబడింది.%s కొరకు సంకేతపదమును మార్చుతోందిసంభాషణా దోషముసంభాషణ ఘటనకొరకు వేచివుందిడెరెక్టరీ '%s' సృష్టించుట.సంక్లిష్ట దోషము - తక్షణ యెబార్టుఅప్రమేయ రక్షణ సందర్భము %s కొత్త STRESS సంకేతపదమును ప్రవేశపెట్టుము: కొత్త UNIX సంకేతపదమును ప్రవేశపెట్టుము: సేవా మాడ్యూల్‌నందు దోషముసంకేతపదము సేవద్వారా ప్రాధమిక పరిశీలన విఫలమైందిమాడ్యూల్ లోడుచేయుటకు విఫలమైందివినియోగదారి ఆనవాళ్ళను అమర్చుటలో విఫలముసేవకొరకు గరిష్ట సంఖ్యలో పునఃప్రయత్నాలను కలిగివుందిదృవీకరణ డాటాను యాక్సిస్ చేయుటకు సరిపోని ఆనవాళ్ళుకీ సృష్టీకరణ సందర్భము %s అప్పగించబడిందిచివరిగా విఫలమైన లాగిన్:%s%s%sచివరి లాగిన్:%s%s%sలాగిన్ విఫలమైంది సరికొత్త వైఫల్యం దీనినుండి మెమొరీ బఫర్ దోషముమాడ్యూల్ తెలియనిదిNIS సంకేతపదము మార్చబడ లేకపోయింది.కొత్త %s%sసంకేతపదము: పాత్ర %sకొరకు యెటువంటి అప్రమేయ రకములేదు మెయిల్ లేదు.మాడ్యూల్ ప్రత్యేకమైన డాటాలేదుఎటువంటి సంకేతపదము యివ్వలేదువిలువైన రక్షణ సందర్భముకాదుసంకేతపదము మార్పు తప్పించబడిందిసంకేతపదము యిప్పటికే వుపయోగించబడింది.సంకేతపదము యిప్పటికే వుపయోగించబడింది. మరియొకదానిని యెంచుకొనుము.సంకేతపదము మార్చలేదుసంకేతపదము: అనుమతి నిరాకరించబడిందితిరిగిటైపుచేయి %sకొత్త %s%sసంకేతపదమును మరలాటైపుచేయుము: కొత్త STRESS సంకేతపదమును తిరిగిటైపుచేయుము: కొత్త UNIX సంకేతపదమును తిరిగిటైపు చేయుము: రక్షణ సందర్భము %s అప్పగించబడిందిసేవ దోషముక్షమించాలి, సంకేతపదము సరిపోలలేదు.సఫలంచిహ్నము కనబడలేదుసిస్టమ్ దోషముతిరిగియిచ్చు విలువ PAM పంపిణీచేత వదిలివేయబడాలిచివరి సమర్ధవంతపు లాగిన్‌నుండి ఆక్కడ %d విఫల లాగిన్ ప్రయత్నం వుంది.చివరి సమర్ధవంతపు లాగిన్‌నుండి ఆక్కడ %d విఫల లాగిన్ ప్రయత్నాలు వున్నాయి.చివరి సమర్ధవంతపు లాగిన్‌నుండి ఆక్కడ %d విఫల లాగిన్ ప్రయత్నాలు వున్నాయి.'%s' కొరకు మరీయెక్కువ లాగిన్‌లుడైరెక్టరీ %sను సృష్టించలేక పోయింది మరియు సిద్దీకరించలేక పోయింది.%s కొరకు విలువైన సందర్భమును పొందలేకపోయిందితెలియని PAM దోషముతెలియని దోషముతెలియని వినియోగదారివినియోగదారి ఖాతా కాలముతీరినదివినియోగదారి ఆనవాళ్ళు కాలముతీరినవిక్రిందనవున్న దృవీకరణ మాడ్యూల్‌కు వినియోగదారి తెలియదుతప్పుగా-చేసినటైపు నిర్ధారణ; సంకేతపదము మార్చబడలేదుహెచ్చరిక: మీ సంకేతపదము %d రోజులో కాలముతీరుతుందిహెచ్చరిక: మీ సంకేతపదము %d రోజులలో కాలముతీరుతుందిహెచ్చరిక: మీ సంకేతపదము %d రోజులలో కాలముతీరుతుందిమీ కొత్త ఖాతాకు స్వాగతము!మీరు విభిన్న పాత్రను లేదా స్థాయిని ప్రవేశపెడదామని అనుకుంటున్నారా?మీరు మీ సంకేతపదమును తక్షణమే మార్చవలసివుంది (password aged)మీరు మీ సంకేతపదమును తక్షణమే మార్చవలసివుంది (root enforced)మీరు ఫోల్డరు %sనందు మెయిల్‌ను కలిగివున్నారు.మీరు మెయిల్ కలిగివున్నారు.మీరు ఫోల్డరు %sనందు కొత్త మెయిల్‌ను కలిగివున్నారు.మీరు కొత్త మెయిల్ కలిగివున్నారు.మీరు ఫోల్డరు %sనందు యెటువంటి మెయిల్ కలిగిలేరు.మీరు ఫోల్డరు %sనందు పాతమెయిల్‌ను కలిగివున్నారు.మీరు పాత మెయిల్ కలిగివున్నారు.మీరు తప్పక పొడవాటి సంకేతపదమును యెంచుకొనవలెను.మీ సంకేతపదమును మార్చుటకు మీరు ఎక్కువసేపు వేచివుండాలిమీ ఖాతా కాలముతీరినది; దయచేసి మీ సిస్టమ్ నిర్వాహకుడిని సంప్రదించండికేస్ మార్పులు మాత్రమేఒకరకంగా వినియోగదారి నామమును కలిగివుందిఒకదానితర్వాత వొకటి అదే అక్షరాలు చాలావున్నాయిఒకదానితర్వాత వొకటి అదే అక్షరాలు చాలావున్నాయితప్పుడు సంభాషణలు (%d) PAM సిద్దముచేయుటలో విఫలమైంది pam_set_item() విఫలమైంది పాలిండ్రోమాఇది పర్యాయంగానాఇది పాతదేనాపాతదానికి మరీ దగ్గరపోలికగావుందిమరీ సరళంగావుందిస్థాయి:లాగిన్:login: failure forking: %mసంభాషణా దోషముసరిపోవునంత కారెక్టర్ క్లాసెస్ లేవుపాత్ర:Linux-PAM-1.1.8/po/sv.gmo0000644000000000000000000002646412216527620011713 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %  '?#^#>L}H$<&9c/&0AI9."@ "X +{  ) 3 !!=!X!"i!!"!!!""70"%h"-"5"F""9#%\##2###!#$ *$ K$V$u$ $!$$0$!% 8%D% S%`%!%%% %,%&"& 9&0C&t&S'#p'-'&'' '(( 2(AS(/(U(+)G)'g)C)?)* /*<*\* m*!**&*6*:!+(\+)+/+5+,"1,T,q, ,,,,, ,,--.-,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-29 08:28+0000 Last-Translator: Göran Uddeborg Language-Team: Swedish (http://www.transifex.com/projects/p/fedora/language/sv/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sv Plural-Forms: nplurals=2; plural=(n != 1); %a %e %b %Y %H.%M.%S %Z från %.*s på %.*s%s misslyckades: fångade signalen %d%s%s misslyckades: slutstatus %d%s misslyckades: okänd status 0x%x%s: Felaktigt nummer till --reset= %s: Kan inte ställa om alla användare till nollskilt värde %s: Okänd flagga %s %s: [--file absolut-filnamn] [--user användarnamn] [--reset[=n]] [--quiet] %s: [-f rooted-filnamn] [--file rooted-filnamn] [-u användarnamn] [--user användarnamn] [-r] [--reset[=n]] [--quiet] (nuvarande) UNIX-lösenord: ...Tyvärr, din tid är ute! ...Tiden håller på att ta slut... Åtkomst godkänd (senaste åtkomst var %ld sekunder sedan).Kontot är låst på grund av %u misslyckade inloggningarKontot är temporärt låst (%ld sekunder kvar)Programmet behöver anropa libpam igenAutentiseringsfelAutentiseringsfelAutentiseringsinformation kan inte återställasAutentiseringstjänsten kan inte hämta autentiseringsinformationAutentiseringstjänst kan inte hämta användarreferenserÅldrande av autentiseringselement inaktiveratAutentiseringselement har gått utAutentiseringselement är inte längre giltigt. Ett nytt behövsAutentiseringselementlås upptagetManipuleringsfel för autentiseringselementDÅLIGT LÖSENORD: %sOgiltigt objekt skickat till pam_*_item()Kan inte skapa/ta bort en post för angiven sessionÄndrar STRESS-lösenord för %s.Ändrar lösenord för %s.KonversationsfelKonversation väntar på händelseSkapar katalogen "%s".Kritiskt fel - avbryter omedelbartStandardsäkerhetskontext %s Ange nytt STRESS-lösenord: Ange nytt UNIX-lösenord: Fel i tjänstemodulLösenordstjänstens preliminära kontroll misslyckadesMisslyckades med att läsa in modulenMisslyckades med att ange användarreferenserMaximalt antal försök har gjorts för denna tjänstOtillräckliga inloggingsuppgifter för åtkomst av autentiseringsdataNyckelskapandekontext %s tilldeladSenaste misslyckade inloggning:%s%s%sSenaste inloggning:%s%s%sInloggning Misslyck Senaste fel Från MinnesbuffertfelModulen är okändNIS-lösenord kunde inte ändras.Nytt %s%slösenord: Ingen standardttyp för %s-roll Inga brev.Ingen modulspecifik data finnsInget lösenord angivetInte en giltig säkerhetskontextÄndring av lösenordet avbröts.Lösenordet har redan använts.Lösenordet har redan används. Välj ett annat.Oförändrat lösenordLösenord: Åtkomst nekadAnge %s igenAnge nytt %s%slösenord igen: Ange nytt STRESS-lösenord igen: Ange nytt UNIX-lösenord igen: Säkerhetskontext %s tilldeladTjänstefelTyvärr, lösenorden stämmer inte överens.LyckadesSymbolen hittades inteSystemfelReturvärdet borde ignoreras vid PAM-avsändandeDet har skett %d misslyckade inloggningsförsök sedan senaste korrekta inloggning.Det har skett %d misslyckade inloggningsförsök sedan senaste korrekta inloggning.Det har skett %d misslyckade inloggningsförsök sedan senaste korrekta inloggning.För många inloggningar för "%s".Kunde inte skapa och initiera katalogen "%s".Kan inte hämta giltig kontext för %sOkänt PAM-felOkänt felOkänd användareAnvändarkontot har gått utAnvändarreferenser har gått utAnvändaren är inte känd för underliggande autentiseringsmodulFelskriven verifikation, lösenord oförändratVarning: ditt lösenord går ut om %d dagVarning: ditt lösenord går ut om %d dagarVarning: ditt lösenord går ut om %d dagarVälkommen till ditt nya konto!Vill du ange en annan roll eller nivå?Du måste ändra ditt lösenord omedelbart (lösenord för gammalt)Du måste ändra ditt lösenord omedelbart (påtvingat av root)Du har brev i katalogen %s.Du har brev.Du har nya brev i katalogen %s.Du har nya brev.Du har inga brev i katalogen %s.Du har gamla brev i katalogen %s.Du har gamla brev.Du måste välja ett längre lösenordDu måste vänta längre innan du kan ändra lösenordDitt konto har gått ut. Kontakta din systemadministratörendast ändringar i gemener och versalerinnehåller användarnamnet i någon forminnehåller en för lång monoton teckensekvensinnehåller för många tecken av samma sort i följdfelaktig konversation (%d) misslyckades med att initiera PAM pam_set_item() misslyckades är ett palindromär roteratär samma som det gamlaär för likt det gamlaär för enkeltnivå:inloggning:inloggning: fel vid grening: %mminnesallokeringsfelför få teckenklasserroll:Linux-PAM-1.1.8/po/eu.gmo0000644000000000000000000000160112216527620011656 00000000000000\    &- !#2VizNew %s%spassword: Password: Retype %sRetype new %s%spassword: System errorUnknown errorlevel:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-12-24 13:54+0000 Last-Translator: Asier Iturralde Sarasola Language-Team: Basque (http://www.transifex.com/projects/p/fedora/language/eu/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: eu Plural-Forms: nplurals=2; plural=(n != 1); %s%sPasahitz berria: Pasahitza: Idatzi berriz %sIdatzi berriz %s%spasahitz berria: Sistemaren erroreaErrore ezezagunamaila:Linux-PAM-1.1.8/po/br.po0000644000000000000000000003224212216527617011517 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Breton (http://www.transifex.com/projects/p/fedora/language/" "br/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: br\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/el.gmo0000644000000000000000000000073012216527620011647 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Greek MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: el Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/km.gmo0000644000000000000000000003254212216527620011664 00000000000000W !&Gc}&. 76 #n   '   5' ] !p    , . 6O    "   "  5 /R       ! / N V g 2t    6 *WDD)ETt!,B(k}  "07R  ZqK/K{UMk\~dl%\G^)$7o\TV!TxN#P/t E 3 !>!,!{ "N""]#l$*r$E$b$hF%f%d&{&u&'H#'*l''a,(4(0(<(`1){)**{+,-\-5@.kv.D.\'/k/D/5001k2'2_3.x3*33]3uO444n468L30,&U"E5H)BKT(1C'@ S79F$NJV! I?P>DQ+< W;2#O R:4./%-GAM*= %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionConversation errorConversation is waiting for eventCritical error - immediate abortEnter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailure setting user credentialsInsufficient credentials to access authentication dataLast login:%s%s%sMemory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword has been already used. Choose another.Password unchangedPassword: Permission deniedRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchToo many logins for '%s'.Unknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWelcome to your new account!You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelogin:login: failure forking: %mProject-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 12:00+0000 Last-Translator: Tomáš Mráz Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: km Plural-Forms: nplurals=1; plural=0 %a %b %e %H:%M:%S %Z %Y ពី %.*s លើ %.*s%s ៖ លេខ​មិន​ល្អ​បាន​ផ្ដល់​ទៅ --reset= %s ៖ មិន​អាច​កំណត់​អ្នក​ប្រើ​ទាំងអស់​ទៅ​មិនមែន​សូន្យ​ឡើងវិញ​បានទេ %s ៖ ជម្រើស​ដែល​មិន​ស្គាល់ %s %s ៖ [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] (បច្ចុប្បន្ន) ពាក្យ​សម្ងាត់ UNIX ៖...សូម​ទោស អ្នក​អស់​ពេល​ហើយ ! ...អស់​ពេល... កម្មវិធី​ត្រូវ​តែ​ហៅ libpam ម្ដង​ទៀតកំហុស​ក្នុង​ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវបរាជ័យ​ក្នុង​ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវព័ត៌មាន​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ​មិន​អាច​ត្រូវ​យកបាន​វិញសេវា​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ មិន​អាច​ទៅ​យក​លិខិត​សម្គាល់របស់អ្នក​ប្រើភាព​ចាស់​របស់​ថូខឹន​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ មិនបាន​អនុញ្ញាតថូខឹនផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ​បាន​ផុត​កំណត់ការ​ចាក់សោ​ថូខឹន​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវកំពុង​ជាប់​រវល់កំហុស​រៀបចំ​ថូខឹន​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវពាក្យ​សម្ងាត់​មិន​ល្អ ៖ %sបាន​ហុច​ធាតុមិន​ល្អ​ទៅ​ឲ្យ to pam_*_item()មិន​អាច​បង្កើត ឬ យក​ធាតុ​មួយ​ចេញ សម្រាប់សម័យ​ដែល​បាន​បញ្ជាក់កំហុស​សន្ទនាការ​សន្ទនា​កំពុង​រង់ចាំ​ព្រឹត្តិការណ៍កំហុស​ធ្ងន់ធ្ងរ - បោះបង់ភ្លាមៗបញ្ចូល​ពាក្យ​សម្ងាត់ STRESS ថ្មី ៖ បញ្ចូល​ពាក្យ​សម្ងាត់ UNIX ថ្មី ៖ កំហុស​នៅ​ក្នុង​ម៉ូឌុល​សេវាការពិនិត្យ​មើលដំបូង​ដោយ​សេវា​ពាក្យ​សម្ងាត់​បាន​បរាជ័យបរាជ័យ​ក្នុង​ការ​កំណត់​លិខិត​សម្គាល់របស់អ្នក​ប្រើលិខិត​សម្គាល់​មិន​គ្រប់គ្រាន់ដើម្បី​ចូល​ដំណើរ​ការ​ទិន្នន័យ​ដែល​មាន​ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវចូល​ចុងក្រោយ ៖%s%s%sកំហុស​សតិ​បណ្ដោះ​អាសន្នមិន​ស្គាល់​ម៉ូឌុលមិន​អាច​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់ NIS បាន​ឡើយ ។ពាក្យ​សម្ងាត់ %s%s ថ្មី ៖គ្មាន​សំបុត្រ ។គ្មាន​ម៉ូឌុល​ទិន្នន័យជាក់លាក់​ត្រូវបង្ហាញមិន​បាន​ផ្ដល់​ពាក្យសម្ងាត់មិន​មែន​ជា​បរិបទ​សុវត្ថិភាព​ត្រឹមត្រូវ​មួយឡើយពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។ពាក្យសម្ងាត់​មិន​បាន​ផ្លាស់ប្ដូរ​ឡើយពាក្យសម្ងាត់ ៖ សិទ្ធិ​ត្រូវ​បាន​បដិសេធវាយ​ពាក្យ​សម្ងាត់ %s%s ថ្មី​ឡើង​វិញ ៖វាយ​ពាក្យ​សម្ងាត់ STRESS ថ្មី​ម្ដង​ទៀត ៖ វាយ​ពាក្យ​សម្ងាត់ UNIX ថ្មី​ម្ដង​ទៀត ៖ បរិបទ​សុវត្ថិភាព %s បាន​ផ្ដល់​តម្លៃ​កំហុស​សេវាសូម​ទោស ពាក្យ​សម្ងាត់​មិន​ដូច​គ្នា​ឡើយ ។ជោគជ័យរក​មិន​ឃើញ​និមិត្ត​សញ្ញាកំហុស​ប្រព័ន្ធតម្លៃ​ត្រឡប់​គួរត្រូវ​បាន​មិនអើពើ​ដោយ​ការ​បញ្ជូន PAMមាន​ការ​ចូល​ច្រើន​ពេក​សម្រាប់ '%s' ។មិន​ស្គាល់​កំហុស PAMមិន​ស្គាល់​កំហុសមិន​ស្គាល់​អ្នក​ប្រើគណនី​អ្នក​ប្រើ​បាន​ផុត​កំណត់​ហើយលិខិត​សម្គាល់របស់​អ្នក​ប្រើ​បាន​ផុត​កំណត់អ្នក​ប្រើ មិន​ស្គាល់​ម៉ូឌុលផ្ទៀងផ្ទាត់​ភាពត្រឹមត្រូវមូលដ្ឋានផ្ទៀងផ្ទាត់​អក្ខរាវិរុទ្ធ​ដែល​បាន​វាយខុស ពាក្យ​សម្ងាត់​មិន​បានផ្លាស់ប្ដូរ​សូម​ស្វាគមន៍​មក​កាន់​គណនី​ថ្មី​របស់​អ្នក !អ្នក​ត្រូវ​តែ​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​របស់​អ្នក​ឥឡូវ​នេះ (ពាក្យសម្ងាត់​ចាស់​ហើយ)អ្នក​ត្រូវ​តែ​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​របស់​អ្នក​ឥឡូវ​នេះ (root បាន​ចេញ​បញ្ជា)អ្នក​មាន​សំបុត្រ​នៅ​ក្នុង​ថត %s ។អ្នក​មាន​សំបុត្រ ។អ្នក​មាន​សំបុត្រ​ថ្មី​នៅ​ក្នុង​ថត %s ។អ្នក​មាន​សំបុត្រ​ថ្មី ។អ្នក​គ្មានសំបុត្រនៅ​ក្នុង​ថត %s ។អ្នក​មាន​សំបុត្រ​ចាស់​នៅ​ក្នុង​ថត %s ។អ្នក​មាន​សំបុត្រ​ចាស់ ។អ្នក​ត្រូវ​តែ​ជ្រើស​ពាក្យសម្ងាត់​វែង​ជាង​នេះអ្នក​ត្រូវ​តែ​រង់ចាំ​បន្តិច ដើម្បី​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​របស់​អ្នកគណនី​របស់​អ្នក​បាន​ផុតកំណត់​ហើយ សូម​ទាក់ទង​អ្នក​គ្រប់គ្រង​ប្រព័ន្ធ​របស់​អ្នកគ្រាន់​តែ​ផ្លាស់ប្ដូរ​លក្ខណៈ​អក្សរ​ប៉ុណ្ណោះ​សន្ទនាច្រឡំ (%d) បាន​បរាជ័យ​ក្នុង​ការ​ចាប់ផ្ដើម PAM បាន​បរាជ័យ pam_set_item() ត្រឡប់​ចុះ​ឡើងបាន​បង្វិលដូច​គ្នា​នឹង​ពាក្យ​សម្ងាត់​ចាស់ស្រដៀង​គ្នា​ណាស់​នឹង​ពាក្យ​សម្ងាត់​ចាស់សាមញ្ញ​ពេកចូល ៖ចូល ៖ ចម្លង​ខ្លួន​ឯង​មិន​បាន​ជោគជ័យ ៖ %mLinux-PAM-1.1.8/po/cs.gmo0000644000000000000000000002701012216527620011654 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %$-L$k&2NQ=-Ek/#&-ATJ- :- h *  4 5 2!N!c!t!!'!$!!"5"2L""9"1"B#>K#-##3# $"$!2$T$!f$$&$$ $$ %'%%M%d%l% %%%%$% &&)&2&C&KR&&R'('7(:J(((((,(9)%B)h)/)!*&<*7c*7** *!*+&3+"Z+}++,+C+ ,/6,4f,2,,,- - +-!8-)Z-- ----&-.,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 12:14+0000 Last-Translator: Tomáš Mráz Language-Team: Czech (http://www.transifex.net/projects/p/fedora/language/cs/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: cs Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2 %a %d.%m.%Y %H:%M:%S %Z z %.*s na %.*s%s selhal: dostal signál %d%s%s selhal: návratový kód %d%s selhal: neznámý kód stavu 0x%x%s: Zadána špatná hodnota --reset= %s: Nelze resetovat všechny uživatele nenulově %s: Neznámá volba %s %s: [--file jmeno_souboru] [--user uzivatelske_jmeno] [--reset[=n]] [--quiet] %s: [-f plna-cesta-k-souboru] [--file plna-cesta-k-souboru] [-u uzivatelske-jmeno] [--user uzivatelske-jmeno] [-r] [--reset[=n]] [--quiet] (současné) UNIX heslo: ...Čas vypršel! ..Odpočet byl spuštěn... Přístup povolen (poslední přístup před %ld vteřinami).Účet uzamčen z důvodu %u neúspěšných pokusů o přihlášeníÚčet dočasně uzamčen (zbývá %ld vteřin)Aplikace musí znovu zavolat libpamChyba autentizaceSelhání autentizaceAutentizační informace nelze získatAutentizační služba nemůže získat informace pro autentizaciAutentizační služba nemůže získat údaje o oprávněních uživateleStárnutí autentizačního tokenu zakázánoAutentizační token vypršelAutentizační token již není platný; vyžadován novýAutentizační token je uzamčenChyba manipulace s autentizačním tokenemŠPATNÉ HESLO: %sFunkci pam_*_item() byla předána špatná položkaPro zadané sezení nelze vytvořit/odstranit záznamZměna STRESS hesla pro %s.Změna hesla pro %s.Chyba konverzaceKonverzace čeká na událostVytváření adresáře '%s'.Kritická chyba - okamžité ukončeníVýchozí bezpečnostní kontext %s Zadejte nové STRESS heslo: Zadejte nové UNIX heslo: Chyba v modulu službySelhání předběžné kontroly ve službě heslaNepodařilo se nahrát modulChyba při nastavení údajů o oprávněních uživateleVyčerpán maximální počet pokusů pro službuNedostatečná oprávnění pro přístup k autentizačním datůmBezpečnostní kontext pro vytváření klíčů %s přidělenPoslední neúspěšné přihlášení:%s%s%sPoslední přihlášení:%s%s%sLogin Selhání Poslední selhání Od Chyba alokace pamětiNeznámý modulNIS heslo se nepodařilo změnit.Nové %s%sheslo: Chybí výchozí typ pro roli %s Žádná pošta.Nelze najít data potřebná pro modulNezadáno hesloNeplatný bezpečnostní kontextZměna hesla přerušena.Heslo již bylo použito.Heslo již bylo použito. Zvolte jiné.Heslo nebylo změněnoHeslo: Přístup zamítnutOpakujte %sOpakujte nové %s%sheslo: Opakujte nové STRESS heslo: Opakujte nové UNIX heslo: Bezpečnostní kontext %s přidělenChyba službyHesla se neshodují.ÚspěchSymbol nenalezenChyba systémuNávratová hodnota by měla být ignorována rozhodovacím mechanismem PAMOd posledního úspěšného došlo k %d neúspěšnému pokusu o přihlášení.Od posledního úspěšného došlo k %d neúspěšným pokusům o přihlášení.Od posledního úspěšného došlo k %d neúspěšným pokusům o přihlášení.Od posledního úspěšného došlo k %d neúspěšným pokusům o přihlášení.Příliš mnoho přihlášení pro '%s'.Nezdařilo se vytvořit a inicializovat adresář '%s'.Nezdařilo se najít platný bezpečnostní kontext pro %sNeznámá chyba PAMNeznámá chybaNeznámý uživatelUživatelský účet vypršelÚdaje o oprávněních uživatele vypršelyUživatel není znám použitému autentizačnímu moduluChybné potvrzení. Heslo nezměněnoVarování: Vaše heslo vyprší za %d denVarování: Vaše heslo vyprší za %d dnyVarování: Vaše heslo vyprší za %d dníVarování: Počet dní do vypršení hesla: %dVítejte na vašem novém účtu!Chcete zadat jinou roli nebo úroveň?Musíte okamžitě změnit své heslo (heslo vypršelo)Musíte okamžitě změnit své heslo (vynuceno rootem)Máte poštu ve složce %s.Máte poštu.Máte novou poštu ve složce %s.Máte novou poštu.Nemáte žádnou poštu ve složce %s.Máte starou poštu ve složce %s.Máte starou poštu.Musíte zvolit delší hesloNa změnu svého hesla musíte počkat déleVáš účet vypršel; kontaktujte prosím svého správce systémupouze mění velikostobsahuje v nějaké formě uživatelské jménoobsahuje příliš dlouhou postupnou sekvenci znakůobsahuje příliš mnoho stejných znaků za sebounesprávná konverzace (%d) chyba při inicializaci PAM chyba pam_set_item() je palindromje posunutéje stejné jako předcházejícíje příliš podobné předcházejícímuje příliš jednoduchéúroveň:login:login: chyba forku: %mchyba alokace pamětinemá dostatek různých druhů znakůrole:Linux-PAM-1.1.8/po/zh_HK.po0000644000000000000000000003216712216527620012117 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Chinese (Hong Kong) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_HK\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/quot.sed0000644000000000000000000000023112160065211012213 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g Linux-PAM-1.1.8/po/kn.gmo0000644000000000000000000004415112216527620011664 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %S[pVJ#n9$G^u7NT2 B!X!C"=c"r"##X$Z$E%`%j-&)&n&1'p'iH(((b(J>)V)Q)J2*K}*>*+]+{+b,-v-).)G.sq.).4/fD/%/k/-=0{k0G0W/1o1T1L2123L35e3W3W3UK4l45d%5575%5p5l67I7}7}8&9"?9.b9W9f9P::p;<F<<=o>U:?-?_?7@kV@_@7"AmZAAPBX CyCDD.8EOgE>E[E1RF9FWF/G FGTGahG2GZGXH,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-15 08:49+0000 Last-Translator: shanky Language-Team: Kannada (http://www.transifex.com/projects/p/fedora/language/kn/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: kn Plural-Forms: nplurals=1; plural=0; %a %b %e %H:%M:%S %Z %Y %.*s ನಿಂದ %.*s ನಲ್ಲಿ%s ವಿಫಲಗೊಂಡಿದೆ: ಹಿಡಿಯಲಾದ ಸೂಚನೆ %d%s%s ವಿಫಲಗೊಂಡಿದೆ: ನಿರ್ಗಮಿಸಲು ಸಂಜ್ಞೆ %d %s ವಿಫಲಗೊಂಡಿದೆ: ಗೊತ್ತಿರದ ಸ್ಥಿತಿ 0x%x%s: --reset= ಗೆ ಕೊಡಲಾದ ಕೆಟ್ಟ ಸಂಖ್ಯೆ %s: ಎಲ್ಲಾ ಬಳಕೆದಾರರನ್ನು ಶೂನ್ಯವಲ್ಲದುದಕ್ಕೆ ಪುನರ್ ಸಂಯೋಜಿಸಲು ಆಗುವುದಿಲ್ಲ %s: ಗುರುತಿಸಲಾಗದ ಆಯ್ಕೆ %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (ಪ್ರಸ್ತುತ) UNIX ಗುಪ್ತಪದ: ...ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಸಮಯ ಮುಗಿಯಿತು! ...ಸಮಯ ಸರಿಯುತ್ತಿದೆ... ಅನುಮತಿಯನ್ನು ನೀಡಲಾಗಿದೆ (ಕೊನೆಯ ಬಾರಿಗೆ %ld ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ ನಿಲುಕಿಸಿಕೊಳ್ಳಲಾಗಿತ್ತು).ವಿಫಲಗೊಂಡ %u ಪ್ರವೇಶಗಳಿಂದಾಗಿ ಖಾತೆಯನ್ನು ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆಖಾತೆಯನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ (%ld ಸೆಕೆಂಡುಗಳು ಉಳಿದಿವೆ)ಅನ್ವಯವು libpam ಅನ್ನು ಪುನಃ ಕರೆಯಬೇಕಿದೆದೃಢೀಕರಣ ದೋಷದೃಢೀಕರಣವು ವಿಫಲಗೊಂಡಿದೆದೃಢೀಕರಣ ಮಾಹಿತಿಯನ್ನು ಮರುಗಳಿಸಲು ಆಗುವುದಿಲ್ಲದೃಢೀಕರಣ ಸೇವೆಯು ದೃಢೀಕರಣ ಮಾಹಿತಿಯನ್ನು ಹಿಂಪಡೆಯಲು ಆಗುತ್ತಿಲ್ಲದೃಢೀಕರಣ ಸೇವೆಗೆ ಬಳಕೆದಾರನ ರುಜುವಾತುಗಳನ್ನು ಹಿಂಪಡೆಯಲು ಆಗುತ್ತಿಲ್ಲದೃಢೀಕರಣ ಸಂಕೇತದ ಕಾಲಾವಧಿ ಮೀರುವುದನ್ನು ಅಶಕ್ತಗೊಳಿಸಲಾಗಿದೆದೃಢೀಕರಣ ಸಂಕೇತದ ಅವಧಿ ಅಂತ್ಯಗೊಂಡಿದೆದೃಢೀಕರಣ ಸಂಕೇತವು ಅಮಾನ್ಯವಾಗಿದೆ; ಹೊಸದೊಂದರ ಅಗತ್ಯವಿದೆದೃಢೀಕರಣ ಸಂಕೇತ ಲಾಕ್ ಕಾರ್ಯಮಗ್ನವಾಗಿದೆದೃಢೀಕರಣ ಸಂಕೇತದ ಕುಶಲ ನಿರ್ವಹಣೆಯಲ್ಲಿನ ದೋಷಕೆಟ್ಟ ಗುಪ್ತಪದ: %spam_*_item() ಗೆ ಒಂದು ಕೆಟ್ಟ ಅಂಶವನ್ನು ರವಾನಿಸಲಾಗಿದೆನಿಗದಿತ ಸೆಶನ್ನಿಗೆ ಒಂದು ನಮೂದನ್ನು ಮಾಡಲು/ತೆಗೆದುಹಾಕಲು ಆಗುತ್ತಿಲ್ಲ%s ಗಾಗಿ STRESS ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ.%s ಗಾಗಿ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ.ಸಂವಾದಾತ್ಮಕ ದೋಷಸಂವಾದವು ಕಾರ್ಯಕ್ರಮಕ್ಕಾಗಿ ಕಾಯುತ್ತಿದೆಕೋಶ '%s' ಅನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ.ಸಂದಿಗ್ಧ ದೋಷ - ತಕ್ಷಣ ಸ್ಥಗಿತಗೊಳಿಸುಡೀಫಾಲ್ಟ್‍ ಸುರಕ್ಷತಾ ಸನ್ನಿವೇಶ %s ಹೊಸ STRESS ಗುಪ್ತಪದವನ್ನು ಟೈಪಿಸಿ: ಹೊಸ UNIX ಗುಪ್ತಪದವನ್ನು ದಾಖಲಿಸಿ: ಸೇವಾ ಮಾಡ್ಯೂಲಿನಲ್ಲಿ ದೋಷಗುಪ್ತಪದ ಸೇವೆಯ ಪ್ರಾಥಮಿಕ ಪರೀಕ್ಷೆಗಳು ವಿಫಲಗೊಂಡಿವೆಮಾಡ್ಯೂಲನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆಬಳಕೆದಾರ ರುಜುವಾತುಗಳನ್ನು ಸಂಯೋಜಿಸುವಲ್ಲಿ ವಿಫಲತೆಸೇವೆಗಾಗಿನ ಗರಿಷ್ಟ ಸಂಖ್ಯೆಯ ಪುನರ್ ಪ್ರಯತ್ನಗಳೆಲ್ಲಾ ಖಾಲಿಯಾಗಿವೆದೃಢೀಕರಣ ದತ್ತಾಂಶವನ್ನು ನಿಲುಕಿಸಿಕೊಳ್ಳಲು ರುಜುವಾತು ಸಾಕಷ್ಟು ಇಲ್ಲಕೀಲಿ ನಿರ್ಮಾಣ ಸನ್ನಿವೇಶ %s ವನ್ನು ನಿಯೋಜಿಸಲಾಗಿದೆಕೊನೆಯ ಲಾಗಿನ್:%s%s%sಕೊನೆಯ ಲಾಗಿನ್:%s%s%sಪ್ರವೇಶ ವಿಫಲತೆಗಳು ಇತ್ತೀಚಿನ ವಿಫಲತೆ ಇಂದ ಮೆಮೊರಿ ಬಫರ್ ದೋಷಮಾಡ್ಯೂಲು ತಿಳಿದಿಲ್ಲNIS ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ್ಲ.ಹೊಸ %s%sಗುಪ್ತಪದ: %s ಪಾತ್ರಕ್ಕಾಗಿ ಯಾವುದೆ ಡೀಫಾಲ್ಟ್‍ ಬಗೆ ಇಲ್ಲ ಯಾವುದೇ ಮೈಲ್ ಇಲ್ಲ.ಮಾಡ್ಯೂಲ್ ನಿಶ್ಚಿತ ದತ್ತಾಂಶವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲಯಾವುದೇ ಗುಪ್ತಪದ ನೀಡಲಾಗಿಲ್ಲಸಮಂಜಸವಾದ ಸುರಕ್ಷತಾ ಸನ್ನಿವೇಶ ಅಲ್ಲಗುಪ್ತಪದ ಬದಲಾವಣೆಯನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಲಾಗಿದೆ.ಗುಪ್ತಪದವನ್ನು ಈಗಾಗಲೆ ಬಳಸಲಾಗಿದೆ.ಗುಪ್ತಪದವು ಈಗಾಗಲೆ ಬಳಸಲ್ಪಟ್ಟಿದೆ. ಬೇರೊಂದನ್ನು ಬಳಸಿ.ಗುಪ್ತಪದ ಬದಲಾಗಿಲ್ಲಗುಪ್ತಪದ: ಅನುಮತಿಯನ್ನು ನಿರಾಕರಿಸಲಾಗಿದೆ%s ಅನ್ನು ಮರಳಿ ನಮೂದಿಸಿಹೊಸ %s%sಗುಪ್ತಪದವನ್ನು ಪುನರ್ ಟೈಪಿಸಿ: ಹೊಸ STRESS ಗುಪ್ತಪದವನ್ನು ಪುನಃ ಟೈಪಿಸಿ: ಹೊಸ UNIX ಗುಪ್ತಪದವನ್ನು ಪುನಃ ಟೈಪಿಸಿ: ಸುರಕ್ಷತಾ ಸನ್ನಿವೇಶ %s ವನ್ನು ನಿಯೋಜಿಸಲಾಗಿದೆಸೇವಾ ದೋಷಕ್ಷಮಿಸಿ, ಗುಪ್ತಪದಗಳು ತಾಳೆಯಾಗುತ್ತಿಲ್ಲ.ಯಶಸ್ಸುಸಂಜ್ಞೆ ಪತ್ತೆಯಾಗಿಲ್ಲವ್ಯವಸ್ಥೆಯ ದೋಷಮರಳುವ ಮೌಲ್ಯವನ್ನು PAM ರವಾನೆಯಿಂದ ಅಲಕ್ಷಿಸಬೇಕುಕೊನೆಯ ಬಾರಿಯ ಯಶಸ್ವಿ ಪ್ರವೇಶದ ನಂತರ %d ವಿಫಲಗೊಂಡ ಪ್ರಯತ್ನಗಳಿವೆ.ಕೊನೆಯ ಬಾರಿಯ ಯಶಸ್ವಿ ಪ್ರವೇಶದ ನಂತರ %d ಪ್ರವೇಶದ ಪ್ರಯತ್ನಗಳು ವಿಫಲಗೊಂಡಿದೆ.'%s'ಗಾಗಿ ಬಹಳಷ್ಟು ಲಾಗಿನ್ನುಗಳು.ಕೋಶ '%s' ಅನ್ನು ರಚಿಸಲು ಹಾಗು ಆರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.%s ಗಾಗಿ ಮಾನ್ಯವಾದ ಸನ್ನಿವೇಶವನ್ನು ಪಡೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗಿಲ್ಲಗೊತ್ತಿರದ PAM ದೋಷಗೊತ್ತಿರದ ದೋಷಗೊತ್ತಿರದ ಬಳಕೆದಾರಬಳಕೆದಾರ ಖಾತೆಯು ಅವಧಿ ಅಂತ್ಯವಾಗಿದೆಬಳಕೆದಾರ ರುಜುವಾತುಗಳ ಅವಧಿ ಅಂತ್ಯಗೊಂಡಿದೆಕೆಳಗಿರುವ ದೃಢೀಕರಣ ಮಾಡ್ಯೂಲಿಗೆ ಬಳಕೆದಾರನ ಬಗ್ಗೆ ತಿಳಿದಿಲ್ಲ್ಲತಪಾಸಣೆಗೆ ಟೈಪಿಸಿದ್ದು ತಪ್ಪಾಗಿದೆ; ಗುಪ್ತಪದ ಬದಲಾಗಿಲ್ಲಎಚ್ಚರಿಕೆ: ನಿಮ್ಮ ಗುಪ್ತಪದದ ವಾಯಿದೆಯು %d ದಿನಗಳ ನಂತರ ತೀರಿಹೋಗುತ್ತದೆಎಚ್ಚರಿಕೆ: %d ದಿನಗಳಲ್ಲಿ ನಿಮ್ಮ ಗುಪ್ತಪದದ ಅವಧಿ ಅಂತ್ಯಗೊಳ್ಳುತ್ತದೆನಿಮ್ಮ ಹೊಸ ಖಾತೆಗೆ ಸುಸ್ವಾಗತ!ನೀವು ನೀವು ಬೇರೊಂದು ಪಾತ್ರ ಅಥವ ಮಟ್ಟವನ್ನು ದಾಖಲಿಸಲು ಇಚ್ಛಿಸುತ್ತೀರ?ನೀವು ಈ ಕೂಡಲೆ ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಿಸುವ ಅಗತ್ಯವಿದೆ (ಗುಪ್ತಪದವು ಬಹಳ ಹಳೆಯದಾಗಿದೆ)ನೀವು ಈ ಕೂಡಲೆ ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಿಸುವ ಅಗತ್ಯವಿದೆ (ಮೂಲದಿಂದ ಒತ್ತಾಯಿತವಾಗಿದೆ)%s ಫೋಲ್ಡರಿನಲ್ಲಿ ನಿಮಗಾಗಿ ಮೈಲ್ ಇದೆ.ನಿಮಗಾಗಿ ಮೈಲ್ ಇದೆ.%s ಫೋಲ್ಡರಿನಲ್ಲಿ ನಿಮಗಾಗಿ ಹೊಸ ಮೈಲ್ ಇದೆ.ನಿಮಗಾಗಿ ಹೊಸ ಮೈಲ್ ಇದೆ.%s ಫೋಲ್ಡರಿನಲ್ಲಿ ನಿಮಗಾಗಿ ಯಾವುದೆ ಮೈಲ್ ಇಲ್ಲ.%s ಫೋಲ್ಡರಿನಲ್ಲಿ ನಿಮಗಾಗಿ ಹಳೆ ಮೈಲ್ ಇದೆ.ನಿಮಗಾಗಿ ಹಳೆ ಮೈಲ್ ಇದೆ.ನೀವು ಒಂದು ಉದ್ದವಾದ ಗುಪ್ತಪದವನ್ನು ಆರಿಸಬೇಕುನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲು ನೀವು ಬಹಳ ಸಮಯ ಕಾಯಬೇಕುನಿಮ್ಮ ಖಾತೆಯ ಅವಧಿ ಅಂತ್ಯಗೊಂಡಿದೆ; ದಯವಿಟ್ಟು ನಿಮ್ಮ ಗಣಕ ವ್ಯವಸ್ಥಾಪಕರನ್ನು ಸಂಪರ್ಕಿಸಿಕೇವಲ ಕೇಸ್ ಗಳ ಬದಲಾವಣೆಯಾಗಿದೆ ಅಷ್ಟೆಇದು ಯಾವುದೊ ಒಂದು ಬಗೆಯಲ್ಲಿ ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಒಳಗೊಂಡಿದೆಇದು ಒಂದೇ ಬಗೆಯ ಉದ್ದನೆಯ ಅಕ್ಷರಗಳ ಅನುಕ್ರಮವನ್ನು ಹೊಂದಿದೆಇದು ಒಂದೇ ಬಗೆಯ ಬಹಳಷ್ಟು ಕ್ಯಾರೆಕ್ಟರುಗಳನ್ನು ಅನುಕ್ರಮವಾಗಿ ಹೊಂದಿದೆದೋಷಪೂರಿತ ಸಂವಾದ (%d) PAM ಅನ್ನು ಆರಂಭಿಸುವಲ್ಲಿನ ವಿಫಲತೆ pam_set_item() ಮಾಡುವಲ್ಲಿ ವಿಫಲತೆ ಇದು ಒಂದು ಸಮಾನ ಪೂರ್ವಾಪರವಾಗಿದೆ (palindrome)ಇದು ತಿರುಗಿಸಲಾಗಿದೆಇದು ಹಳೆಯದರ ಹಾಗೆಯೇ ಇದೆಇದು ಹಳೆಯದಕ್ಕೆ ಬಹಳಷ್ಟು ಹೋಲುತ್ತದೆಇದು ಬಹಳ ಸರಳವಾಗಿದೆಮಟ್ಟ:ಲಾಗಿನ್:ಲಾಗಿನ್: ಫೋರ್ಕಿಂಗ್ ಮಾಡುವಲ್ಲಿ ವಿಫಲತೆ:%mಮೆಮೊರಿ ನಿಯೋಜನಾ ದೋಷಸಾಕಷ್ಟು ಕ್ಯಾರೆಕ್ಟರ್ ವರ್ಗಗಳು ಇಲ್ಲಪಾತ್ರ:Linux-PAM-1.1.8/po/mai.po0000644000000000000000000003224712216527620011661 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Maithili (http://www.transifex.com/projects/p/fedora/language/" "mai/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mai\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/fa.gmo0000644000000000000000000000075212216527620011641 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Persian (http://www.transifex.com/projects/p/fedora/language/fa/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fa Plural-Forms: nplurals=1; plural=0; Linux-PAM-1.1.8/po/vi.gmo0000644000000000000000000002766512216527620011705 00000000000000y8 9 R ] f   ! &  G uh    1/ &a + &   . :6 7q #  9 $'Ck|5  ! B [|, *4K6 15I"[~" /%U hs   +3 D2QD Q/k"  6*TZ-2%DXD -@_!,B$#6/Z  /=DKf~] v ' .!Q'*yuu &$H?F;+9ISO! \'  ! = S$!.x! !!#!!'"&=")d" " "G"#44#;i#J#!#0$C$@^$$$3$%0%L%,]%+%7%+%A&\&{&&&&&&/&&'@']'&o' '"''C'f(c(*(*)8>)w)))3)')C*@Z*E*E*9'+?a+B+F+#+,O,)_,,*,',,*-?1-fq-%-.-6-.d.|....../ %/3/'B/j/#/ /O'J%[(v:+D;Xy`1\uWwxb"sG.qU EZp*F&jhA6k8 )Co?/39gH=^#,i5dt ]!RcT7r2Nle4 Lf-BP aS>m_0IMn$@KVQ Y< %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-11-30 11:03+0000 Last-Translator: mattheu_9x Language-Team: Vietnamese (http://www.transifex.com/projects/p/fedora/language/vi/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: vi Plural-Forms: nplurals=1; plural=0; %a %b %e %H:%M:%S %Z %Y từ %.*s trên %.*s%s thất bại: bắt tín hiệu %d%s%s thất bại: lối ra mã %d%s thất bại: không rõ tình trạng 0x%x%s: Xấu số cho --cài lại= %s: Không thể thiết lập lại tất cả các người dùng khác không %s: Được thừa nhận lựa chọn%s %s: [- tập bắt rễ-filename] [- người sử dụng tên người dùng] [- đặt lại [= n]] [- yên tĩnh] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] hiện hành UNIX mật khẩu: ...Xin lỗi, đã hết thời gian! ...Thời gian đang dần hết... Được phép truy cập (lần truy cập trước %ld giây trước)Tài khoản bị khóa do đăng nhập %u không thành côngTài khoản tạm thời bị khóa (%ld giây còn lại)Ứng dụng cần gọi libpam lần nữaXác thực lỗiXác thực thất bạiXác thực thông tin không thể được phục hồiDịch vụ chứng thực không thể lấy các thông tin xác thựcDịch vụ chứng thực không thể lấy các chứng chỉ người dùngxác thực token già tàn tậtHết hạn xác thựcDấu hiệu xác thực không còn hiệu lực; yêu cầu dấu hiệu xác thực mớiauthentication token lock busyThao tác xác thực token lỗiMật khẩu không an toàn: %sTình trạng hàng được thông qua để pam_ * _item ()Không thể thực hiện hoặc loại bỏ một mục nhập cho phiên địnhThay đổi mật khẩu căng thẳng cho %s.Thay đổi mật khẩu cho %s.Lỗi giao tiếpGiao tiếp đang chờ kết quảTạo thư mục '%s'.Lỗi nghiêm trọng - hủy bỏ ngayBối cảnh an ninh mặc định %s Nhập mật khẩu căng thẳng mới: Nhập mật khẩu UNIX mới: Lỗi trong mô-đun dịch vụKhông thành công sơ bộ kiểm tra bằng mật khẩu dịch vụKhông thể nạp mô-đunCài đặt ủy nhiệm người dùng thất bạiĐã hết số lần thử lại tối đa cho dịch vụKhông đủ quyền uỷ nhiệm để truy cập dữ liệu xác thựcSáng tạo Context phím %s GiaoLần đăng nhập thất bại trước:%s%s%sLần đăng nhập:%s%s%sĐang nhập Thất bại Thất bại cuốie Từ Lỗi bộ nhớ đệmchưa biết mô-đunNIS mật khẩu không thể được thay đổi.Mật khẩu %s%s mới: Không có loại mặc định cho vai trò %s Không có thư.Hiện tại không có mô-đun dữ liệuKhông có mật khẩu được cung cấpKhông phải là một bối cảnh an ninh hợp lệHủy bỏ việc thay đổi mật khẩu.Mật khẩu đã được dùng. Hãy chọn mật khẩu khác.Chưa thay đổi mật khẩuMật khẩu : Không có đủ quyền thực hiệnNhập lại %sNhập lại mật khẩu %s%s mới: Nhập lại mật khẩu mới căng thẳng: Nhập lại mật khẩu UNIX mới: Bối cảnh an ninh %s GiaoLỗi dịch vụXin lỗi, mật khẩu không khớp.Thành côngKhông tìm thấy biểu tượngLỗi hệ thốngGiá trị trả về phải được bỏ qua bởi PAM công vănĐã có %d lần đăng nhập thất bại kể từ lần đăng nhập thành công trước đó.Có %d lần đăng nhập không thành công kể từ lần đăng nhập thành công trước.Quá nhiều lần đăng nhập cho '%s'.Không thể khởi tạo thư mục '%s'.Không thể có được bối cảnh hợp lệ cho %sKhông biết lỗi PAMLỗi không rõNgười dùng không rõTài khoản người dùng đã hết hiệu lựcHết hạn ủy nhiệm người dùngNgười dùng chưa biết đến mô-đun xác thực tiềm ẩnMã xác nhận mis-đánh máy; mật khẩu không thay đổiCảnh báo: mật khẩu của bạn sẽ hết hạn trong %d ngàyCảnh báo: mật khẩu của bạn sẽ hết hạn trong %d ngàyChào mừng bạn đến tài khoản mới của bạn!Bạn có muốn nhập một vai trò khác nhau hoặc cấp?Bạn phải thay đổi ngay mật khẩu (mật khẩu quá cũ)Bạn phải thay đổi ngay mật khẩu (người chủ ép buộc)Bạn có thư trong thư mục %s.Bạn có thư.Bạn có thư mới trong thư mục %s.Bạn có thư mới.Bạn không có thư trong thư mục %s.Bạn có thư cũ trong thư mục %s.Bạn có thư cũ.Bạn phải chọn mật khẩu dài hơnBạn phải đợi thêm nữa, để thay đổi mật khẩuTài khoản của bạn đã hết hạn dùng: hãy liên lạc với nhà quản trị hệ thốngchỉ thay đổi chữ thường/hoachứa tên user trong một số biểu mẫuchứa quá nhiều kí tự giống nhau liên tiếphội thoại sai (%d) không thể khởi tạo PAM không pam_set_item () là một xâu palindromeđược sử dụng lạilà giống như cũquá giống cái cũquá đơn giảntrình độ:Đăng nhập:đăng nhập: thất bại forking: %mLỗi cấp phát bộ nhớkhông đủ các lớp nhân vậtVai trò:Linux-PAM-1.1.8/po/es.gmo0000644000000000000000000002770112216527620011665 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %! #@0dOX\) "7<Z5@,;S9kRM6F "} D + 4!F!*a!E!(!!"*2"]"&v"("(")" #=:#x#-#?#E$'G$(o$ $3$$%)%F%,^%%/%*%&%&3;&3o&& && &,&/'0J'!{''''''7'6(E(,)23)-f))))!)))@*A`*p*8+L+1l+G+I+0, O,$],,!,&,,&,4-LQ-.-/-2-20.c......!./+/2/)E/o/'/ /,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-06-04 13:29+0000 Last-Translator: Daniel Cabrera Language-Team: Spanish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Yde %.*sen %.*s%s fallido: señal capturada %d%s%s fallido: código de salida %d%s fallido: estado desconocido 0x%x%s: Número incorrecto proporcionado a --reset= %s: No es posible restaurar a todos los usuarios a un número distinto de cero %s: Opción no reconocida %s %s: [--file nombre de archivo-raíz] [--user nombre de usuario] [--reset[=n]] [--quiet] %s: [-f nombre-arch-completo] [--file nombre-arch-completo] [-u nombre-de-usuario] [--user nombre-de-usuario] [-r] [--reset[=n]] [--quiet] (actual) contraseña de UNIX: ...Lo sentimos, el tiempo se ha agotado. ...El tiempo se está agotando... Acceso permitido (el último acceso fué hace %ld segundos).La cuenta está bloqueada debido a %u logueo fallidosLa cuenta está temporalmente bloqueada (%ld segundos restantes)La aplicación debe llamar a libpam de nuevoError de autenticaciónFallo de autenticaciónNo es posible recuperar la información de autenticaciónEl servicio de autenticación no puede recuperar la información de autenticaciónEl servicio de autenticación no puede recuperar las credenciales del usuarioAntigüedad del testigo de autenticación inhabilitadaTestigo de autenticación caducadoEl testigo de autenticación ya no es válido; necesitará uno nuevoEl testigo de autenticación parece ocupadoError de manipulación del testigo de autenticaciónCONTRASEÑA INCORRECTA: %sElemento incorrecto enviado a pam_*_item()No es posible crear o eliminar una entrada de la sesión especificadaCambiando la contraseña STRESS para %s.Cambiando la contraseña de %s.Error de conversaciónLa conversación está esperando el eventoCreando directorio '%s'.Error crítico: cancelación inmediataContexto de Seguridad Predeterminado %s Introduzca la nueva contraseña STRESS: Introduzca la nueva contraseña de UNIX: Error en el módulo de serviciosError de comprobación preliminar del servicio de contraseñaError al cargar el móduloError al definir las credenciales del usuarioSe ha agotado el número máximo de reintentos para el servicioCredenciales insuficientes para acceder a los datos de autenticaciónContexto de Creación Clave %s AsignadoÚltimo inicio de sesión fallido:%s%s%sÚltimo inicio de sesión:%s%s%sFallo de Ingresos Ultimo fallo desde Error de buffer de memoriaMódulo desconocidoNo es posible cambiar la contraseña NIS.Nueva %s%scontraseña: No hay tipo por defecto para la función %s No hay correo.No hay datos específicos del módulo presentesNo se ha proporcionado ninguna contraseñaNo es un contexto de seguridad válidoLa contraseña no ha cambiado.La contraseña ya se ha utilizado. Seleccione otra.La contraseña ya se ha utilizado. Seleccione otra.La contraseña no ha cambiadoContraseña: Permiso denegadoReingrese %sVuelva a escribir la nueva %s%scontraseña: Vuelva a escribir la nueva contraseña STRESS: Vuelva a escribir la nueva contraseña de UNIX: Contexto de seguridad %s asignadoError de servicioLas contraseñas no coinciden.ÉxitoSímbolo no encontradoError del sistemaEl valor devuelto debe ser omitido por el expedidor PAMHubo %d intento de logueo fallido desde el último logueo exitosoo.Hubo %d intentos de logueo fallidos desde el último logueo exitoso. Hubo %d intentos de logueo fallidos desde el último logueo exitoso. Hay demasiados inicios de sesión para "%s".No se pudo crear e inicializar el directorio '%s'.Imposible obtener un contexto válido para %sError desconocido de PAMError desconocidoUsuario desconocidoLa cuenta del usuario ha caducadoLas credenciales del usuario han caducadoUsuario desconocido para el módulo de autenticación subyacenteError al escribir la verificación; la contraseña no ha cambiadoAdvertencia: la contraseña caducará dentro de %d díaAdvertencia: la contraseña caducará dentro de %d díasAdvertencia: la contraseña caducará dentro de %d días¡Bienvenido a su nueva cuenta!¿Desea introducir un nivel o función diferente?Debe cambiar la contraseña inmediatamente (la contraseña ha caducado)Debe cambiar la contraseña inmediatamente (aplicado por el usuario root)Tiene correo en la carpeta %s.Tiene correo.Tiene correo nuevo en la carpeta %s.Tiene correo nuevo.No tiene correo en la carpeta %s.Tiene correo antiguo en la carpeta %s.Tiene correo antiguo.Debe elegir una contraseña más largaDebe esperar más tiempo para cambiar la contraseñaLa cuenta ha caducado, póngase en contacto con el administrador del sistemasólo hay cambios de minúsculas y mayúsculasde alguna manera contiene el nombre del usuariocontiene demasiados carateres iguales consecutivoscontiene demasiados carateres iguales consecutivosconversación incorrecta (%d) error al iniciar PAM error en pam_set_item() es un palíndromoes igual pero al revéses igual que la antiguaes demasiado similar a la antiguaes demasiado sencillanivel:nombre de usuario:inicio de sesión: error en horquilla: %merror de asignación de memoriano hay suficientes clases de caracteresfunción:Linux-PAM-1.1.8/po/pa.gmo0000644000000000000000000004032412216527620011652 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % CL<EEy$Gu.r]>y>dr Z ( %!r:!!E"O"`##I $BS$ $W$e%Qu%J%&T2&A&Q&6'2R'>'9'c'=b(S(w(|l)X):B*#}*1*,*)+^*+%+O+#+`#,C,F,L-a\-p-0/.`.%u..<.?.K2/N~//S/ ;0/H0x0010282{2Mu3 33"4W'4D44NN556XJ7|7 88F9&9S93H:]|:Y:94;mn;;d<,=WK==p/>">/> >?0?&M?Pt?#? ??4@5=@Us@ @,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-08-30 12:55+0000 Last-Translator: asaini Language-Team: Panjabi (Punjabi) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pa Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s ਫੇਲ ਹੋ ਗਿਆ: ਸਿਗਨਲ %d%s ਮਿਲਿਆ%s ਫੇਲ ਹੋਇਆ: ਕੋਡ %d ਨਾਲ ਬੰਦ ਹੋ ਗਿਆ%s ਫੇਲ ਹੋਇਆ: ਅਣਪਛਾਤੀ ਸਥਿਤੀ 0x%x%s: --reset= ਲਈ ਗਲਤ ਨੰਬਰ ਦਿੱਤਾ ਗਿਆ %s: ਸਭ ਉਪਭੋਗੀਆਂ ਨੂੰ ਨਾਨ-ਜ਼ੀਰੋ ਰੀਸੈੱਟ ਨਹੀਂ ਕਰ ਸਕਦਾ %s: ਬੇਪਛਾਣ ਚੋਣ %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (ਮੌਜੂਦਾ) UNIX ਪਾਸਵਰਡ: ...ਅਫਸੋਸ, ਤੁਹਾਡਾ ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਗਿਆ ਹੈ! ...ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਰਿਹਾ ਹੈ... ਪਹੁੰਚ ਰੱਦ ਕੀਤੀ (ਪਿਛਲੀ ਪਹੁੰਚ %ld ਸਕਿੰਟ ਪਹਿਲਾਂ ਸੀ)।%u ਫੇਲ ਹੋਏ ਲਾਗਇਨਾਂ ਕਰਕੇ ਖਾਤਾ ਲਾਕ ਕੀਤਾ ਹੈਖਾਤਾ ਆਰਜੀ ਤੌਰ ਤੇ ਲਾਕ ਕੀਤਾ ਹੈ (%ld ਸਕਿੰਟ ਬਾਕੀ ਹਨ)ਕਾਰਜ ਲਈ ਫਿਰ libpam ਨੂੰ ਕਾਲ ਕਰਨ ਦੀ ਲੋੜ ਹੈਪਰਮਾਣਕਿਤਾ ਗਲਤੀਪਰਮਾਣਕਿਤਾ ਫੇਲਪ੍ਰਮਾਣਿਕਤਾ ਜਾਣਕਾਰੀ ਰਿਕਵਰ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀਪ੍ਰਮਾਣਿਕਤਾ ਸਰਵਿਸ ਪ੍ਰਮਾਣਿਕਤਾ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕਦੀਪ੍ਰਮਾਣਿਕਤਾ ਸਰਵਿਸ ਉਪਭੋਗੀ ਅਧਿਕਾਰ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕਦਾਪ੍ਰਮਾਣਿਕਤਾ ਟੋਕਲ ਏਜਿੰਗ ਅਯੋਗ ਹੈਪਰਮਾਣਕਿਤਾ ਟੋਕਨ ਦੀ ਮਿਆਦ ਪੁੱਗ ਚੁੱਕੀ ਹੈਪ੍ਰਮਾਣਿਕਤਾ ਟੋਕਨ ਦੀ ਮਿਆਦ ਪੁੱਗ ਚੁੱਕੀ ਹੈ, ਨਵੇਂ ਦੀ ਲੋੜ ਹੈਪ੍ਰਮਾਣਿਕਤਾ ਟੋਕਨ ਲਾਕ ਬਿਜ਼ੀ ਹੈਪ੍ਰਮਾਣਿਕਤਾ ਟੋਕਨ ਸੋਧ ਗਲਤੀਗਲਤ ਪਾਸਵਰਡ: %sਗਲਤ ਇਕਾਈਆਂ pam_*_item() ਨੂੰ ਪਾਸ ਕੀਤੀਆਂ ਹਨਖਾਸ ਸ਼ੈਸ਼ਨ ਲਈ ਇੱਕ ਐਂਟਰੀ ਬਣਾ/ਹਟਾ ਨਹੀਂ ਸਕਦਾ%s ਲਈ STRESS ਪਾਸਵਰਡ ਤਬਦੀਲ ਕਰ ਰਿਹਾ ਹੈ।%s ਲਈ ਪਾਸਵਰਡ ਤਬਦੀਲ ਕਰ ਰਿਹਾ ਹੈ।ਤਬਦੀਲੀ ਗਲਤੀਗੱਲਬਾਤ ਕਿਸੇ ਘਟਨਾ ਦੀ ਉਡੀਕ ਵਿੱਚ ਹੈਡਾਇਰੈਕਟਰੀ '%s' ਬਣਾ ਰਿਹਾ ਹੈ।ਨਾਜ਼ੁਕ ਗਲਤੀ - ਤਰੁੰਤ ਅਧੂਰਾ ਛੱਡਿਆਮੂਲ ਸੁਰੱਖਿਆ ਪ੍ਰਸੰਗ %s ਨਵਾਂ STRESS ਪਾਸਵਰਡ ਦਿਓ: ਨਵਾਂ ਯੂਨਿਕਸ ਪਾਸਵਰਡ ਦਿਓ: ਸੇਵਾ ਮੈਡੀਊਲ ਵਿੱਚ ਗਲਤੀਪਾਸਵਰਡ ਸਰਵਿਸ ਦੁਆਰਾ ਪਹਿਲੀ ਜਾਂਚ ਫੇਲ ਹੋਈਮੈਡਿਊਲ ਲੋਡ ਕਰਨ ਵਿੱਚ ਫੇਲਉਪਭੋਗੀ ਅਧਿਕਾਰ ਸੈੱਟ ਕਰਨ ਵਿੱਚ ਫੇਲਸਰਵਿਸ ਨੂੰ ਵੱਧ-ਤੋਂ-ਵੱਧ ਵਰਤਣ ਦੀ ਸੀਮਾ ਪਾਰ ਹੋ ਗਈ ਹੈਪ੍ਰਮਾਣਿਕਤਾ ਡਾਟਾ ਵਰਤਣ ਲਈ ਲੋੜੀਂਦੇ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨਕੁੰਜੀ ਬਣਾਉਣ ਪ੍ਰਸੰਗ %s ਨਿਰਧਾਰਤ ਕੀਤਾਆਖਰੀ ਫੇਲ ਹੋਇਆ ਲਾਗਇਨ:%s%s%sਆਖਰੀ ਲਾਗਇਨ:%s%s%sLogin Failures Latest failure From ਮੈਮੋਰੀ ਬਫ਼ਰ ਗਲਤੀਮੈਡੀਊਲ ਅਣਜਾਣ ਹੈNIS ਪਾਸਵਰਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।ਨਵਾਂ %s%sਪਾਸਵਰਡ: ਰੋਲ %s ਵਾਲੀ ਕੋਈ ਮੂਲ ਕਿਸਮ ਨਹੀਂ ਹੈ ਕੋਈ ਮੇਲ ਨਹੀਂ।ਕੋਈ ਮੈਡਿਊਲ ਸੰਬੰਧੀ ਡਾਟਾ ਮੌਜੂਦ ਨਹੀਂ ਹੈਕੋਈ ਪਾਸਵਰਡ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆਇੱਕ ਠੀਕ ਸੁਰੱਖਿਆ ਪਰਸੰਗ ਨਹੀਂਪਾਸਵਰਡ ਤਬਦੀਲੀ ਅਧੂਰੀ ਛੱਡੀ ਗਈ।ਗੁਪਤ-ਸ਼ਬਦ ਪਹਿਲਾਂ ਹੀ ਵਰਤਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।ਪਾਸਵਰਡ ਪਹਿਲਾਂ ਵੀ ਵਰਤਿਆ ਗਿਆ ਹੈ। ਵੱਖਰਾ ਚੁਣੋ।ਪਾਸਵਰਡ ਨਾ-ਤਬਦੀਲ ਹੈਪਾਸਵਰਡ: ਅਧਿਕਾਰ ਪਾਬੰਦੀਮੁੜ-ਲਿਖੋ %sਨਵਾਂ %s%sਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ: ਨਵਾਂ STRESS ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ: ਨਵਾਂ ਯੂਨਿਕਸ ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ: ਸੁਰੱਖਿਆ ਪ੍ਰਸੰਗ %s ਨਿਰਧਾਰਤ ਕੀਤਾਸੇਵਾ ਗਲਤੀਮਾਫ ਕਰਨਾ ਪਾਸਵਰਡ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ।ਸਫ਼ਲਨਿਸ਼ਾਨ ਨਹੀਂ ਮਿਲਿਆਸਿਸਟਮ ਗਲਤੀਰਿਟਰਨ ਮੁੱਲ PAM ਡਿਸਪੈਚ ਦੁਆਰਾ ਅਣਡਿੱਠਾ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈਪਿਛਲੇ ਸਫਲਤਾਪੂਰਕ ਲਾਗਇਨ ਤੋਂ ਬਾਇਦ %d ਫੇਲ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ ਹੈ।ਪਿਛਲੇ ਸਫਲਤਾਪੂਰਕ ਲਾਗਇਨ ਤੋਂ ਬਾਇਦ %d ਫੇਲ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਹਨ।ਪਿਛਲੇ ਸਫਲਤਾਪੂਰਕ ਲਾਗਇਨ ਤੋਂ ਬਾਇਦ %d ਫੇਲ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਹਨ।'%s' ਲਈ ਬਹੁਤ ਸਾਰੇ ਲਾਗਇਨ।ਡਾਇਰੈਕਟਰੀ '%s' ਨੂੰ ਬਣਾਉਣ ਅਤੇ ਸ਼ੁਰੂ ਕਰਨ ਵਿੱਚ ਅਸਮਰਥ।%s ਲਈ ਯੋਗ ਪ੍ਰਸੰਗ ਲੈਣ ਵਿੱਚ ਅਸਮਰਥਅਣਜਾਣ PAM ਗਲਤੀਅਣਜਾਣੀ ਗਲਤੀਅਣਜਾਣ ਉਪਭੋਗੀਉਪਭੋਗੀ ਖਾਤੇ ਦੀ ਮਿਆਦ ਪੁੱਗ ਚੁੱਕੀ ਹੈਉਪਭੋਗੀ ਅਧਿਕਾਰ ਖਤਮ ਹੋ ਗਏ ਹਨਪ੍ਰਮਾਣਿਕਤਾ ਮੈਡਿਊਲ ਨੂੰ ਆਪਣੇ ਉਪਭੋਗੀ ਬਾਰੇ ਕੁਝ ਪਤਾ ਨਹੀਂਗਲਤ-ਟਾਈਪ ਜਾਂਚ; ਪਾਸਵਰਡ ਨਾ-ਤਬਦੀਲਚੇਤਾਵਨੀ: ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨ ਵਿੱਚ ਪੁੱਗ ਜਾਵੇਗੀਚੇਤਾਵਨੀ: ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨਾਂ ਵਿੱਚ ਪੁੱਗ ਜਾਵੇਗੀਚੇਤਾਵਨੀ: ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨਾਂ ਵਿੱਚ ਪੁੱਗ ਜਾਵੇਗੀਤੁਹਾਡੇ ਨਵੇਂ ਖਾਤੇ ਵਿੱਚ ਜੀ ਆਇਆਂ ਨੂੰ!ਕੀ ਤੁਸੀਂ ਇੱਕ ਵੱਖਰਾ ਰੋਲ ਜਾਂ ਲੈਵਲ ਦੇਣਾ ਚਾਹੁੰਦੇ ਹੋ?ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਤੁਰੰਤ ਤਬਦੀਲ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ (ਪਾਸਵਰਡ ਪੁਰਾਣਾ ਹੋ ਗਿਆ ਹੈ)ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਤੁਰੰਤ ਤਬਦੀਲ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ (ਰੂਟ ਵੱਲੋਂ ਹਦਾਇਤ)ਫੇਲਡਰ %s ਵਿੱਚ ਤੁਹਾਡੀ ਮੇਲ ਹੈ।ਤੁਹਾਡੀ ਮੇਲ ਹੈ।ਫੋਲਡਰ %s ਵਿੱਚ ਤੁਹਾਡੀ ਨਵੀਂ ਮੇਲ ਹੈ।ਤੁਹਾਡੀ ਨਵੀਂ ਮੇਲ ਹੈ।ਫੋਲਡਰ %s ਵਿੱਚ ਤੁਹਾਡੀ ਕੋਈ ਮੇਲ ਨਹੀਂ ਹੈ।ਫੋਲਡਰ %s ਵਿੱਚ ਤੁਹਾਡੀ ਪੁਰਾਣੀ ਮੇਲ ਹੈ।ਤੁਹਾਡੀ ਪੁਰਾਣੀ ਮੇਲ ਹੈ।ਤੁਹਾਨੂੰ ਲੰਮੇ ਪਾਸਵਰਡ ਦੀ ਚੋਣ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈਤੁਹਾਨੂੰ ਲੰਬੇ ਸਮੇਂ ਲਈ ਆਪਣੇ ਪਾਸਵਰਡ ਲਈ ਉਡੀਕ ਕਰਨੀ ਪਵੇਗੀਤੁਹਾਡਾ ਖਾਤਾ ਮਿਆਦ ਪੁੱਗ ਗਈ ਹੈ; ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਸਿਸਟਮ ਪਰਬੰਧਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋਸਿਰਫ ਅੱਖਰ ਤਬਦੀਲੀਕੁਸੇ ਰੂਪ ਵਿੱਚ ਉਪਭੋਗੀ ਨਾਂ ਸ਼ਾਮਿਲ ਹੈਇੱਕ ਬਹੁਤ ਜਿਆਦਾ ਲੰਬੀ ਇਕਸੁਰਤਾ ਵਾਲੀ ਅੱਖਰ ਲੜੀ ਸਮਾਈ ਹੋਈ ਹੈਲਗਾਤਾਰ ਬਹੁਤ ਸਾਰੇ ਮਿਲਦੇ-ਜੁਲਦੇ ਅੱਖਰ ਸ਼ਾਮਿਲ ਹਨਗਲਤ ਅਨੁਵਾਦ (%d) PAM ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਫੇਲ pam_set_item() ਲਈ ਫੇਲ ਇੱਕ palindrome ਹੈਘੁੰਮਾਇਆ ਹੈਪੁਰਾਣੇ ਵਰਗਾ ਹੈਪੁਰਾਣੇ ਨਾਲ ਬਹੁਤ ਮਿਲਦਾ-ਜੁਲਦਾ ਹੈਬਹੁਤ ਸਧਾਰਨ ਹੈਲੈਵਲ:ਲਾਗਇਨ:ਲਾਗਇਨ: ਫੋਰਕਿੰਗ ਫੇਲ: %mਮੈਮੋਰੀ ਨਿਰਧਾਰਨ ਗਲਤੀਲੋੜੀਂਦੀਆਂ ਅੱਖਰ ਸ਼੍ਰੇਣੀਆਂ ਨਹੀਂ ਹਨਰੋਲ:Linux-PAM-1.1.8/po/kk.po0000644000000000000000000005131312216527617011521 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Baurzhan Muftakhidinov , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-06-11 09:53+0000\n" "Last-Translator: Baurzhan Muftakhidinov \n" "Language-Team: Kazakh (http://www.transifex.com/projects/p/fedora/language/" "kk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kk\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Уақытыңыз бітіп барады...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Кешіріңіз, сіздің уақытыңыз бітті!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "қате сұхбат (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Пароль:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "%s%s үшін жаңа пароль: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "%s%s үшін жаңа парольді қайта енгізіңіз: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Кешіріңіз, парольдер өзара сәйкес емес." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s қайта енгізіңіз" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Парольді өзгертуден бас тартылды." #: libpam/pam_item.c:311 msgid "login:" msgstr "тіркелгі:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Сәтті" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Қатаң қате - ұзамай-ақ шығу" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Модульді жүктеу мүмкін емес" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Таңба табылмады" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Қызмет модулінде қате" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Жүйелік қате" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Жады буфер қатесі" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Рұқсат жоқ" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Шындылықты тексеру қатесі" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" "Шындылықты тексеру мәліметтерге қол жеткізу үшін тіркелгі ақпараты " "жеткіліксіз" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Шындылықты тексеру қызметі мәліметтерді жүктей алмады" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Пайдаланушы шындылықты тексеру қызметіне белгісіз" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Қызмет үшін анықталған талаптар саны біткен" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Шындылықты тексеру маркері бұдан былай қате; жаңасы керек" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Пайдаланушы тіркелгісінің мерзімі аяқталған" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Көрсетілген сессия үшін жазбаны жасау/өшіру мүмкін емес" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Шындылықты тексеру қызметі пайдаланушының мәліметтерін жүктей алмады" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Пайдаланушы тіркелгісінің мерзімі аяқталған" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Пайдаланушы мәліметін орнату мүмкін емес" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Модуль үшін керек ақпарат жоқ болып тұр" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item() құрамында қате элемент берілген" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Сұхбат қатесі" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Шындылықты тексеру маркерімен әрекет өткізу қатесі" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Шындылықты тексеру ақпаратын қайтару мүмкін емес" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Шындылықты тексеру маркерінің оқшаулауы бос емес" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Шындылықты тексеру маркерінің мерзіммен шектеу сөндірілген" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Парольдерді тексеру қызметі алдын-ала тексеруду өткізе алмады" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Қайтарылған мәнді PAM-ға берілген кезде елемеу керек" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Модуль белгісіз" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Шындылықты тексеру маркерінің мерзімі аяқталған" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Сұхбат үрдісі оқиғаны күтіп тұр" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Бағдарлама libpam-ды қайтадан шақыруы керек" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Белгісіз PAM қатесі" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "алдыңғысына сәйкес болып тұр" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "жадыны бөлу қатесі" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "палиндром болып тұр" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "өзгерістер таңбалардың регистрінде ғана" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ескі парольге өте ұқсас" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "өте оңай болып тұр" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "аударылған ескі пароль" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "керек таңбалар кластары жоқ" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "құрамында бірдей таңбалардың тізбегі бар" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "құрамында біркелкі таңбалардың тым ұзын тізбегі бар" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "құрамында пайдаланушы аты бар" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Пароль көрсетілмеді" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Пароль өзгертілмеді" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ҚАТЕ ПАРОЛЬ: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s қатесі: шығу коды %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s қатесі: алынған сигнал %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s қатесі: белгісіз қалып-күйі 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " қайдан: %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " қайда: %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Соңғы рет жүйеге кіру:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Жаңа тіркелгңізіге қош келдіңіз!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Соңғы сәтсіз жүйеге кіру талабы:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "Соңғы сәтті жүйеге кіру реттен кейін %d қате талап болған." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "Соңғы сәтті жүйеге кіру реттен кейін %d қате талап болған." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' үшін жүйеге кіру талап саны тым көп." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Пошта жоқ." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Сізде жаңа поштаңыз бар." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Сізде ескі поштаңыз бар." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Сізде пошта бар." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Сізде %s бумасында пошта жоқ." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Сізде %s бумасында жаңа поштаңыз бар." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Сізде %s бумасында ескі поштаңыз бар." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Сізде %s бумасында поштаңыз бар." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "'%s' бумасын жасау." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "%s бумасын жасау мүмкін емес: %m" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Пароль осыған дейін қолданған. Басқасын таңдаңыз." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Пароль осыған дейін қолданылған." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Бастапқы қауіпсіздік контексті %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Басқа роль не деңгейді енгізуді қалайсыз ба?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ролі:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "%s ролі үшін бастапқы түрі көрсетілмеген\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "деңгейі:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Дұрыс қауіпсіздік контексті емес" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s үшін дұрыс контексті алу мүмкін емес" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "%s қауіпсіздік контексті орнатылды" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "%s кілттерді жасау қауіпсіздік контексті орнатылды" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM-ды іске қосу мүмкін емес\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() орындау мүмкін емес\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: үрдісті бастау мүмкін емес: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s үшін STRESS паролін өзгерту." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Жаңа STRESS паролі: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Жаңа STRESS паролін қайта енгізіңіз: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Растау дұрыс өтпеді; пароль өзгертілмеді" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Тіркелгі уақытша оқшауланған (%ld секунд қалды)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Тіркелгі %u рет қате кіру талабы есебінен оқшауланды" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Шындылықты анықтау қатесі" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Қызмет қатесі" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Белгісіз пайдаланушы" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Белгісіз қате" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset= үшін қате сан берілді\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: %s опциясы белгісіз\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file түбірлік_файл_аты] [--user пайдаланушы] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Барлық пайдаланушыларды нөлдік емес мәнге тастау мүмкін емес\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Пайдаланушы аты Сәтсіз кіру саны Соңғы қате Қайдан\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f түбірлік_файл_аты] [--file түбірлік_файл_аты]\n" " [-u пайдаланушы_аты] [--user пайдаланушы_аты]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Рұқсат расталған (соңғы рет %ld секунд бұрын болған)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "Тіркелгіңіздің мерзімі аяқталған; жүйелік администраторыңызға хабарласыңыз" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Сізге пароліңізді қазір ауыстыру керек (root мәжбүрлеген)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Сізге пароліңізді қазір ауыстыру керек (парольдің мерзімі аяқталған)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Ескерту: сіздің пароліңіздің мерзімі %d күнде бітеді" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Ескерту: сіздің пароліңіздің мерзімі %d күнде бітеді" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS паролін өзгерту мүмкін емес." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Сізге ұзынырақ парольді таңдау керек" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s үшін парольді өзгерту." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(ағымдағы) UNIX паролі: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Пароліңізді өзгерті үшін біраз күтуіңіз керек" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Жаңа UNIX паролін енгізіңіз: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Жаңа UNIX паролін қайта енгізіңіз: " Linux-PAM-1.1.8/po/he.po0000644000000000000000000003616312216527617011516 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:57+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...הזמן עומד להיגמר...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...מצטער, הזמן נגמר!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "ססמה: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "סליחה, הססמאות לא תואמות." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "שינוי ססמה בוטל." #: libpam/pam_item.c:311 msgid "login:" msgstr "כניסה:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "הצליח" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "שגיאה קריטית - ביטול מידי" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "שגיאת מערכת" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "ההרשאה נדחתה" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "כשל באימות" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "חשבון משתמש פג" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "שגיאת PAM לא מוכרת" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "זהה לישנה" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "פילנדרום" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "יותר מדי דומה לישנה" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "פשוטה מדי." #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "לא סופקה ססמה" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "ססמה לא שונתה" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ססמה לא טובה: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "ברוך הבא לחשבונך החדש!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "היה ניסיון התחברות %d שנכשל מאז ההתחברות האחרונה שהצליחה." msgstr[1] "היו %d ניסיונות התחברות שנכשלו מאז ההתחברות האחרונה שהצליחה." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "אין דואר." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "יש לך דואר חדש." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "יש לך דואר ישן." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "יש לך דואר." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "שינוי ססמה בוטל." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "תפקיד: " #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "רמה:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "משנה ססמת STRESS עבור %s" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "הקלד ססמת STRESS חדשה:" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "הקלד שוב ססמת STRESS חדשה:" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "החשבון נעול זמנית (%ld שניות נותרו)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "החשבון ננעל בעקבות %u ניסיונות התחברות שנכשלו" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "שגיאת אימות" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "שגיאת שירות" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "משתמש לא ידוע" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "שגיאה לא מוכרת" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "פג תוקף חשבונך; אנא צור קשר עם מנהל המערכת שלך" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "הנך מחויב לשנות את ססמתך מידית (דרישת מנהל המערכת)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "הנך מחויב לשנות את ססמתך מידית (הססמה התיישנה)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "אזהרה: הססמה שלך תפוג תוך יום %d" msgstr[1] "אזהרה: הססמה שלך תפוג תוך %d ימים" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "אזהרה: הססמה שלך תפוג תוך %d ימים" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "לא היה ניתן לשנות ססמת NIS." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "אתה חייב לבחור ססמה ארוכה יותר" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "משנה ססמה עבור %s.‏" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "ססמת יוניקס (נוכחית): " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "אתה חייב לחכות יותר כדי לשנות את הססמה" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "הכנס ססמת יוניקס חדשה:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "נא להקליד שוב את ססמת היוניקס החדשה: " Linux-PAM-1.1.8/po/he.gmo0000644000000000000000000001160512216527620011646 000000000000002C<HIc&+ *K e" )4Fc ~ H Z huZ-D4Dy!, BB        & " % R <`    $ ! -) "W (z -     2=)UB- '7Pqk9(S@Z79EqR #-Qd l x/!- . &, 1*)' 0$2"+% ( #(current) UNIX password: ...Sorry, your time is up! ...Time is running out... Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Authentication errorAuthentication failureBAD PASSWORD: %sChanging STRESS password for %s.Changing password for %s.Critical error - immediate abortEnter new STRESS password: Enter new UNIX password: NIS password could not be changed.No mail.No password suppliedPassword change aborted.Password unchangedPassword: Permission deniedRetype new STRESS password: Retype new UNIX password: Service errorSorry, passwords do not match.SuccessSystem errorThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.Unknown PAM errorUnknown errorUnknown userUser account has expiredWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail.You have new mail.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratoris a palindromeis the same as the old oneis too similar to the old oneis too simplelevel:login:role:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:57+0000 Last-Translator: Tomáš Mráz Language-Team: Hebrew MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: he Plural-Forms: nplurals=2; plural=(n != 1) ססמת יוניקס (נוכחית): ...מצטער, הזמן נגמר! ...הזמן עומד להיגמר... החשבון ננעל בעקבות %u ניסיונות התחברות שנכשלוהחשבון נעול זמנית (%ld שניות נותרו)שגיאת אימותכשל באימותססמה לא טובה: %sמשנה ססמת STRESS עבור %sמשנה ססמה עבור %s.‏שגיאה קריטית - ביטול מידיהקלד ססמת STRESS חדשה:הכנס ססמת יוניקס חדשה:לא היה ניתן לשנות ססמת NIS.אין דואר.לא סופקה ססמהשינוי ססמה בוטל.ססמה לא שונתהססמה: ההרשאה נדחתההקלד שוב ססמת STRESS חדשה:נא להקליד שוב את ססמת היוניקס החדשה: שגיאת שירותסליחה, הססמאות לא תואמות.הצליחשגיאת מערכתהיה ניסיון התחברות %d שנכשל מאז ההתחברות האחרונה שהצליחה.היו %d ניסיונות התחברות שנכשלו מאז ההתחברות האחרונה שהצליחה.שגיאת PAM לא מוכרתשגיאה לא מוכרתמשתמש לא ידועחשבון משתמש פגאזהרה: הססמה שלך תפוג תוך יום %dאזהרה: הססמה שלך תפוג תוך %d ימיםאזהרה: הססמה שלך תפוג תוך %d ימיםברוך הבא לחשבונך החדש!הנך מחויב לשנות את ססמתך מידית (הססמה התיישנה)הנך מחויב לשנות את ססמתך מידית (דרישת מנהל המערכת)יש לך דואר.יש לך דואר חדש.יש לך דואר ישן.אתה חייב לבחור ססמה ארוכה יותראתה חייב לחכות יותר כדי לשנות את הססמהפג תוקף חשבונך; אנא צור קשר עם מנהל המערכת שלךפילנדרוםזהה לישנהיותר מדי דומה לישנהפשוטה מדי.רמה:כניסה:תפקיד: Linux-PAM-1.1.8/po/pt_BR.gmo0000644000000000000000000002617112216527620012264 00000000000000y8 9 R ] f   ! &  G uh    1/ &a + &   . :6 7q #  9 $'Ck|5  ! B [|, *4K6 15I"[~" /%U hs   +3 D2QD Q/k"  6*TZ-2%DXD -@_!,B$#6/Z  /=DKf~[s{#1< UGvu4)Hr>+5,1^u5KF0V K+0 Q )e @   !#!?!%Z!"!!!!7!-"(G"6p">","#1#,F#s##"##,#$0$H$)`$$$%$$$$ $ %%&%L%$h%%%%%%6%|"&?&&2&-/']'v'''!'A'7(PV((((0(-)1L)~)) )))")!*8*%U*B{*$*/*0+D+a+{++ +++++, ,-,"L, o,O'J%[(v:+D;Xy`1\uWwxb"sG.qU EZp*F&jhA6k8 )Co?/39gH=^#,i5dt ]!RcT7r2Nle4 Lf-BP aS>m_0IMn$@KVQ Y< %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-02-21 12:49+0000 Last-Translator: Elder Marco Language-Team: Portuguese (Brazil) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt_BR Plural-Forms: nplurals=2; plural=(n > 1) %a %b %e %H:%M:%S %Z %Yde %.*sem %.*s%s falhou: detectou sinal %d%s%s falhou: código de saída %d%s falhou: status desconhecido 0x%x%s: Número insuficiente fornecido para --reset= %s: Impossível redefinir todos os usuários para não-zero %s: Opção não reconhecida %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] Senha UNIX (atual):...Desculpe, seu tempo está aumentando! ...O tempo está acabando... Acesso concedido (o último acesso foi a %ld segundos atrás).Conta bloqueada devido a %u falhas de loginConta temporariamente bloqueada (restam %ld segundos)O aplicativo precisa chamar libpam novamenteErro de autenticaçãoFalha de autenticaçãoImpossível recuperar informações de autenticaçãoO serviço de autenticação não recuperou informações de autenticaçãoO serviço de autenticação não recuperou as credenciais do usuárioValidade do token de autenticação desabilitadoToken de autenticação expiradoO token de autenticação não é mais válido; é necessario um novo tokenBloqueio de token de autenticação ocupadoErro de manipulação de token de autenticaçãoSENHA INCORRETA: %sÍtem incorreto passado para pam_*_item()Impossível fazer/remover uma entrada para a sessão específicaMudando senha STRESS para %s.Mudando senha para %s.Erro de conversaçãoConversação aguardando por eventoCriando o diretório '%s'.Erro crítico - abortar imediatamenteContexto de Segurança Padrão %s Digite a nova senha STRESS:Digite a nova senha UNIX:Erro no módulo de serviçoFalha na verificação preliminar por serviço de senhaFalha ao carregar móduloFalha ao definir credenciais do usuárioEsgotado o número máximo de tentativas para serviçoCredenciais insuficientes para acessar dados de autenticaçãoContexto de criação de chave %s atribuídoFalha no último login:%s%s%sÚltimo login:%s%s%sLogin Falhas Último falha De Erro do buffer de memóriaMódulo desconhecidoA senha NIS não pôde ser mudada.Nova %s%ssenha:Não existe tipo padrão para a função %s Não há mensagens.Não há nenhum dado específico para o módulo Nenhuma senha informadaNão é um contexto de segurança válidoA alteração de senha foi abortada.A senha já foi usada. Escolha outra.Senha inalteradaSenha:Permissão negadaRedigite %sRedigite a nova %s%ssenha:Digite novamente a nova senha STRESS:Redigite a nova senha UNIX:Contexto de segurança %s atribuídoErro de serviçoAs senhas não são iguais.SucessoSímbolo não encontradoErro do sistemaO valor de retorno deve ser ignorado pelo despacho PAMHouve %d falhas de login desde o último login bem sucedido.Houveram %d falhas de login desde o último login bem sucedido.Houveram %d falhas de login desde o último login bem sucedido.Há logins demais para '%s'.Impossível criar e inicializar o diretório "%s".Impossível obter um contexto válido para %sErro desconhecido no PAMErro desconhecidoUsuário desconhecidoA conta do usuário expirouCredenciais do usuário expiradasUsuário desconhecido para o módulo de autenticação subjacenteVerificação digitada incorretamente; senha inalteradaAviso: sua senha irá expirar em %d diaAviso: sua senha irá expirar em %d diasAviso: sua senha irá expirar em %d diasBem-vindo à sua nova conta!Deseja digitar uma função ou nível diferente?Mude sua senha imediatamente (senha expirada)Mude sua senha imediatamente (aplicado pela raiz)Há mensagens na pasta %s.Há mensagens.Há novas mensagens na pasta %s.Há novas mensagens.Não há mensagens na pasta %s.Há mensagens antigas na pasta %s.Há mensagens antigas.Escolha uma senha mais longaAguarde mais tempo para mudar a senhaSua conta expirou; entre em contato com o administrador do sistemamudou apenas maiúsculas/minúsculascontém o nome de usuário em algum formuláriocontém muitos caracteres igual consecutivamenteconversação errônea (%d) falha ao inicializar PAM falha em pam_set_item() é um palíndromofoi invertidaé igual à antiga senhaé muito semelhante à antigaé simples demaisnível:login:login: falha na bifurcação: %mErro de alocação de memóriaclasses de caractere insuficientesfunção:Linux-PAM-1.1.8/po/kk.gmo0000644000000000000000000003507412216527620011665 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %1*%\:5v'jf&C1&]X_T Kk 0 0 [!eu!!o^"Z"j)#[#_#P$Hj$g$1%,M%z%:%%0%> &_&1~&(&s&3M'L'Q' (](A).U)c) ) *8'*%`*J**H*%-+=S+>+<+[ ,%i, ,, ,G,>-<Y-?--H- 9.D.b.^z.h.hB/F/6/F)0!p00'0S0S(1^|1K1_'2_2<2Q$3v3f39]44B4,43%5BY5,5D5U6d6K67?7`w7L7%81A84s8$8*858+.9!Z9|99<9"939 2:,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-06-11 09:53+0000 Last-Translator: Baurzhan Muftakhidinov Language-Team: Kazakh (http://www.transifex.com/projects/p/fedora/language/kk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: kk Plural-Forms: nplurals=1; plural=0; %a %b %e %H:%M:%S %Z %Y қайдан: %.*s қайда: %.*s%s қатесі: алынған сигнал %d%s%s қатесі: шығу коды %d%s қатесі: белгісіз қалып-күйі 0x%x%s: --reset= үшін қате сан берілді %s: Барлық пайдаланушыларды нөлдік емес мәнге тастау мүмкін емес %s: %s опциясы белгісіз %s: [--file түбірлік_файл_аты] [--user пайдаланушы] [--reset[=n]] [--quiet] %s: [-f түбірлік_файл_аты] [--file түбірлік_файл_аты] [-u пайдаланушы_аты] [--user пайдаланушы_аты] [-r] [--reset[=n]] [--quiet] (ағымдағы) UNIX паролі: ...Кешіріңіз, сіздің уақытыңыз бітті! ...Уақытыңыз бітіп барады... Рұқсат расталған (соңғы рет %ld секунд бұрын болған).Тіркелгі %u рет қате кіру талабы есебінен оқшауландыТіркелгі уақытша оқшауланған (%ld секунд қалды)Бағдарлама libpam-ды қайтадан шақыруы керекШындылықты анықтау қатесіШындылықты тексеру қатесіШындылықты тексеру ақпаратын қайтару мүмкін емесШындылықты тексеру қызметі мәліметтерді жүктей алмадыШындылықты тексеру қызметі пайдаланушының мәліметтерін жүктей алмадыШындылықты тексеру маркерінің мерзіммен шектеу сөндірілгенШындылықты тексеру маркерінің мерзімі аяқталғанШындылықты тексеру маркері бұдан былай қате; жаңасы керекШындылықты тексеру маркерінің оқшаулауы бос емесШындылықты тексеру маркерімен әрекет өткізу қатесіҚАТЕ ПАРОЛЬ: %spam_*_item() құрамында қате элемент берілгенКөрсетілген сессия үшін жазбаны жасау/өшіру мүмкін емес%s үшін STRESS паролін өзгерту.%s үшін парольді өзгерту.Сұхбат қатесіСұхбат үрдісі оқиғаны күтіп тұр'%s' бумасын жасау.Қатаң қате - ұзамай-ақ шығуБастапқы қауіпсіздік контексті %s Жаңа STRESS паролі: Жаңа UNIX паролін енгізіңіз: Қызмет модулінде қатеПарольдерді тексеру қызметі алдын-ала тексеруду өткізе алмадыМодульді жүктеу мүмкін емесПайдаланушы мәліметін орнату мүмкін емесҚызмет үшін анықталған талаптар саны біткенШындылықты тексеру мәліметтерге қол жеткізу үшін тіркелгі ақпараты жеткіліксіз%s кілттерді жасау қауіпсіздік контексті орнатылдыСоңғы сәтсіз жүйеге кіру талабы:%s%s%sСоңғы рет жүйеге кіру:%s%s%sПайдаланушы аты Сәтсіз кіру саны Соңғы қате Қайдан Жады буфер қатесіМодуль белгісізNIS паролін өзгерту мүмкін емес.%s%s үшін жаңа пароль: %s ролі үшін бастапқы түрі көрсетілмеген Пошта жоқ.Модуль үшін керек ақпарат жоқ болып тұрПароль көрсетілмедіДұрыс қауіпсіздік контексті емесПарольді өзгертуден бас тартылды.Пароль осыған дейін қолданылған.Пароль осыған дейін қолданған. Басқасын таңдаңыз.Пароль өзгертілмедіПароль:Рұқсат жоқ%s қайта енгізіңіз%s%s үшін жаңа парольді қайта енгізіңіз: Жаңа STRESS паролін қайта енгізіңіз: Жаңа UNIX паролін қайта енгізіңіз: %s қауіпсіздік контексті орнатылдыҚызмет қатесіКешіріңіз, парольдер өзара сәйкес емес.СәттіТаңба табылмадыЖүйелік қатеҚайтарылған мәнді PAM-ға берілген кезде елемеу керекСоңғы сәтті жүйеге кіру реттен кейін %d қате талап болған.Соңғы сәтті жүйеге кіру реттен кейін %d қате талап болған.'%s' үшін жүйеге кіру талап саны тым көп.%s бумасын жасау мүмкін емес: %m%s үшін дұрыс контексті алу мүмкін емесБелгісіз PAM қатесіБелгісіз қатеБелгісіз пайдаланушыПайдаланушы тіркелгісінің мерзімі аяқталғанПайдаланушы тіркелгісінің мерзімі аяқталғанПайдаланушы шындылықты тексеру қызметіне белгісізРастау дұрыс өтпеді; пароль өзгертілмедіЕскерту: сіздің пароліңіздің мерзімі %d күнде бітедіЕскерту: сіздің пароліңіздің мерзімі %d күнде бітедіЖаңа тіркелгңізіге қош келдіңіз!Басқа роль не деңгейді енгізуді қалайсыз ба?Сізге пароліңізді қазір ауыстыру керек (парольдің мерзімі аяқталған)Сізге пароліңізді қазір ауыстыру керек (root мәжбүрлеген)Сізде %s бумасында поштаңыз бар.Сізде пошта бар.Сізде %s бумасында жаңа поштаңыз бар.Сізде жаңа поштаңыз бар.Сізде %s бумасында пошта жоқ.Сізде %s бумасында ескі поштаңыз бар.Сізде ескі поштаңыз бар.Сізге ұзынырақ парольді таңдау керекПароліңізді өзгерті үшін біраз күтуіңіз керекТіркелгіңіздің мерзімі аяқталған; жүйелік администраторыңызға хабарласыңызөзгерістер таңбалардың регистрінде ғанақұрамында пайдаланушы аты барқұрамында біркелкі таңбалардың тым ұзын тізбегі барқұрамында бірдей таңбалардың тізбегі барқате сұхбат (%d) PAM-ды іске қосу мүмкін емес pam_set_item() орындау мүмкін емес палиндром болып тұраударылған ескі парольалдыңғысына сәйкес болып тұрескі парольге өте ұқсасөте оңай болып тұрдеңгейі:тіркелгі:login: үрдісті бастау мүмкін емес: %mжадыны бөлу қатесікерек таңбалар кластары жоқролі:Linux-PAM-1.1.8/po/lt.po0000644000000000000000000003240312216527617011532 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Lithuanian (http://www.transifex.com/projects/p/fedora/" "language/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lt\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%" "100<10 || n%100>=20) ? 1 : 2);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" msgstr[2] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" msgstr[2] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/hi.po0000644000000000000000000005432712216527617011524 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # kumarvimal , 2013 # Rajesh Ranjan , 2009 # Rajesh Ranjan , 2007 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-01-21 12:02+0000\n" "Last-Translator: kumarvimal \n" "Language-Team: Hindi \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...समय समाप्त हो रहा है...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...क्षमा करें, आपका समय समाप्त हो गया!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "अनियमित बातचीत (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "शब्दकूट: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "नया %s%spassword: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "नया %s%spassword फिर टाइप करें: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "क्षमा करें, शब्दकूट नहीं मिलते हैं." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "फिर टाइप करें %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "कूटशब्द परिवर्तन छोड़ा गया." #: libpam/pam_item.c:311 msgid "login:" msgstr "लॉगिन:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "सफल" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "गंभीर त्रुटि - तत्काल छोड़ें" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "मॉड्यूल लोड करने में विफल" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "संकेत नहीं मिला" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "सेवा मॉड्यूल में त्रुटि" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "सिस्टम त्रुटि" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "स्मृति बफर त्रुटि" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "अनुमति मनाही" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "सत्यापन विफलता" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "सत्यापन आंकड़ा की पहुँच में अपर्याप्त श्रेय" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "सत्यापन सेवा सत्यापन सूचना नहीं हासिल कर सकता है" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "उपयोक्ता अंतर्निहित सत्यापन मॉड्यूल से परिचित नहीं हैं" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "सेवा के लिए अधिकतम संख्या में फिर कोशिश करना समाप्त कर चुका है" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "सत्यापन टोकन अब वैध नहीं है; नया जरूरी है" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "उपयोक्ता खाता की अवधि समाप्त हो चुकी है" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "विशेष सत्र के लिए एक प्रविष्टि नहीं बना/हटा सकता है" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "सत्यापन सेवा उपयोक्ता श्रेय फिर हासिल नहीं कर सकता है" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "उपयोक्ता श्रेय समाप्त" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "विफल जमावट उपयोक्ता श्रेय" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "कोई मॉड्यूल विशेष आंकड़ा मौजूद है" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "खराब मद pam_*_item() में भेजा गया" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "रूपांतरक त्रुटि" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "सत्यापन टोकन मैनिपुलेशन त्रुटि" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "सत्यापन सूचना फिर हासिल नहीं किया जा सकता है" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "सत्यापन टोकन लॉक व्यस्त" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "सत्यापन टोकन एजिंग निष्क्रिय" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "शब्दकूट सेवा के द्वारा प्राथमिक जांच पूरी" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "लौटाए मान को PAM डिस्पैच के द्वारा अनदेखा किया जाना चाहिए" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "मॉड्यूल अनजान है" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "सत्यापन टोकन समाप्त" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "रूपांतरण घटना के प्रतीक्षारत" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "अनुप्रयोग के libpam फिर आह्वान जरूरी" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "अनजान PAM त्रुटि" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "पुराने की तरह समान है" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "स्मृति आबंटन त्रुटि" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "एक पालिनड्रोम है" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "स्थिति परिवर्तन सिर्फ" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "पुराने के बहुत समान है" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "बहुत सरल है" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "घुमाया गया है" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "पर्याप्त वर्ण वर्ग नहीं" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "कई समान वर्ण लगातार समाहित करता है" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "समान वर्ण का लम्बा अनुक्रम समाहित करता है " #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "कुछ रूप में उपयोक्ता नाम समाहित करता है" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "कोई कूटशब्द नहीं दिया गया है" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "शब्दकूट परिवर्तित" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "खराब शब्दकूट: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s विफल: निकास कोड %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s विफल: संकेत घेरा %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s विफल: अनजान स्थिति 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s से" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s पर" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "अंतिम लॉगिन:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "नए खाता में आपका स्वागत है!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "अंतिम लॉगिन विफल:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "%d विफल लॉगिन प्रयास था अंतिम सफल लॉगिन के बाद." msgstr[1] "%d विफल लॉगिन प्रयास थे अंतिम सफल लॉगिन के बाद." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "%d विफल लॉगिन प्रयास थे अंतिम सफल लॉगिन के बाद." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' के लिए बहुत लॉगिन." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "कोई मेल नहीं." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "आपके लिए नया मेल है." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "आपके पास पुराना मेल है." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "आपके पास मेल है." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "आपके पास %s फोल्डर में कोई मेल नहीं है." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "आपके लिए %s फोल्डर में नया मेल है." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "आपके लिए %s फोल्डर में पुराना मेल है." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "आपके लिए %s फोल्डर में मेल है." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "निर्देशिका '%s' बना रहा है." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "निर्देशिका '%s' बनाने और आरंभ करने में असमर्थ." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "शब्दकूट को पहले ही बदला जा चुका है. दूसरा चुनें." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "शब्दकूट प्रयोग हो चूका है. दूसरा चुनें " #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "तयशुदा सुरक्षा संदर्भ %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "क्या आप भिन्न भूमिका या स्तर दाखिल करना चाहेंगे?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "भूमिका: " #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "भूमिका %s के लिए कोई तयशुदा प्रकार नहीं\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "स्तर: " #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "एक वैध सुरक्षा संदर्भ नहीं" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s के लिए वैध संदर्भ पाने में असमर्थ" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "सुरक्षा संदर्भ %s नियत" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "कुंजी निर्माण संदर्भ %s नियत" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM को आरंभ करने में विफल\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() में विफल\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "लॉगिन: विफल फोर्किंग: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "STRESS कूटशब्द को %s के लिए बदल रहा है." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "नया स्ट्रेस शब्दकूट दें: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "नया शब्दकूट फिर टाइप करें: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "जांच गलत टाइप किया गया; शब्दकूट बदला गया" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "खाता अस्थायी रूप से लॉक (%ld seconds left)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "खाता %u विफल लॉगिन के कारण लॉक" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "सत्यापन त्रुटि" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "सेवा त्रुटि" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "अनजान उपयोक्ता" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "अनजान त्रुटि" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: खराब संख्या को --reset= में दिया गया\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: अपरिचित विकल्प %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: सभी उपयोक्ता को गैर शून्य में फिर सेट नहीं कर सकता है\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Failures Latest failure From\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "पहुँच दिया गया (last access was %ld seconds ago)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "आपका खाता समाप्त हो चुका है; कृपया अपने सिस्टम प्रशासक को संपर्क करें" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "आपके लिए अपना शब्दकूट तत्काल बदलना जरूरी है (रूट पुनर्बलित)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "आपके लिए अपना शब्दकूट तत्काल बदलना जरूरी है (शब्दकूट एज्ड)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "चेतावनी: आपका शब्दकूट %d दिन में समाप्त हो जायेगा" msgstr[1] "चेतावनी: आपका शब्दकूट %d दिन में समाप्त हो जायेगा" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "चेतावनी: आपका शब्दकूट %d दिनों में समाप्त हो जायेगा" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS शब्दकूट बदला नहीं जा सका." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "आपको जरूर एक लंबा शब्दकूट चुनना चाहिए" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s के लिए कूटशब्द बदल रहा है" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(मौजूदा) UNIX शब्दकूट: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "आपको अपना शब्दकूट बदलने के लिए लंबी प्रतीक्षा करनी होगी" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "नया UNIX शब्दकूट दें: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "नया UNIX शब्दकूट फिर टाइप करें: " Linux-PAM-1.1.8/po/gl.po0000644000000000000000000003224512216527617011521 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Galician (http://www.transifex.com/projects/p/fedora/language/" "gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/Makefile.in.in0000644000000000000000000003223212215551447013222 00000000000000# 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: Linux-PAM-1.1.8/po/ks.po0000644000000000000000000003224512216527617011534 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Kashmiri (http://www.transifex.com/projects/p/fedora/language/" "ks/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ks\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/mr.gmo0000644000000000000000000004227212216527620011674 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %K$3pAfM0u1]E1ed z RE!1!+!!"##Q0$$X%K\%2%\%8&S&L'"f'Q'5'H(?Z(T(R(UB)n)B*wJ*w*:+Y+9,)O,dy,/,/-W>-0-i-'1.^Y.;.?.=4/Or//>D00"080Z0gX1Y1R2m2K2252(3v?3834T5}5iX6,6617NA7Q77|8# 9-:C::;9<V<'*=VR=:=V=V;>4>a>)??)x@m@hA\yA(A0AW0B(B/BaB[CC#C CC7C;DOVDD,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-05-03 07:46+0000 Last-Translator: sandeeps Language-Team: Marathi (http://www.transifex.com/projects/p/fedora/language/mr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: mr Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y %.*s पासून %.*s वरील%s अपयशी: संकेत %d%s प्राप्त झाले%s अपयशी: एक्जीट कोड %d%s अपयशी: अपरिचीत स्थिती 0x%x%s: --reset= करीता अयोग्य संख्या पुरविली गेली %s: सर्व वापरकर्ता विना-शून्य असे पुन्हस्थापन करू शकत नाही %s: अपरिचीत पर्याय %s %s: [--file रूटेड-फाइलनाव] [--user वापरकर्त्याचे नाव] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (चालू) UNIX गुप्तशब्द: ...माफ करा, तुमची वेळ समाप्त झाली आहे! ...वेळ फारच कमी आहे... प्रवेश स्वीकारले (शेवटचा प्रवेश %ld सेकंद पूर्वी आढळला).%u अपयशी प्रवेश मुळे खाते कुलूपबंद केलेखातं तात्पूर्ते कुलूपबंद केले (%ld सेकंद शिल्लक)अनुप्रयोगास libpam ची आवश्चकता आहेअधिप्रमाणन त्रुटीअधिप्रमाणन अपयशअधिप्रमाणन माहिती पुन्हा प्राप्त केली जाऊ शकत नाहीअधिप्रमाणन सेवा अधिप्रमाणन माहिती प्राप्त करू शकले नाहीअधिप्रमाणन सेवा वापरकर्ता श्रेय प्राप्त करू शकत नाहीअधिप्रमाणन टोकन कालबाह्यता अकार्यान्वीत केले गेलेअधिप्रमाणन टोकन कालबाह्य झालेअधिप्रमाणन टोकन यापुढे वैध नाही; नवीन आवश्यक आहेअधिप्रमाणन टोकन कुलूप व्यस्थ आहेअधिप्रमाणन टोकन सदोष त्रुटीअयोग्य गुप्तशब्द: %spam_*_item() करीता अयोग्य घटक पाठविले गेलेनिर्देशीत सत्र करीता नोंदणी बनवू/काढून टाकू शकत नाही%s करीता STRESS गुप्तशब्द बदलवित आहे.%s करीता गुप्तशब्द बदलवित आहे.संवाद त्रुटीसंवाद घटनाच्या प्रतिक्षेत आहेसंचयीका '%s' बनवित आहे.गंभीर त्रुटी - लगेच रद्द करामुलभूत सुरक्षा संदर्भ %s नवीन STRESS गुप्तशब्द प्रविष्ट करा: नवीन UNIX गुप्तशब्द प्रविष्ट करा: सेवा विभाग अंतर्गत त्रुटी आढळलीगुप्तशब्द सेवा करीता प्राथमिक तपास अपयशीविभाग दाखल करण्यास अपयशीवापरकर्ता श्रेय स्थापीत करतेवेळी अपयशी झालेसेवा करीताचे कमाल पुन्हप्रारंभ संख्या संपलेअधिप्रमाणन माहिती करीता प्रवेशसाठी अपुरे श्रेयकि निर्माण संदर्भ %s लागू केले गेलेशेवटचे अपयशी दाखलन:%s%s%sशेवटचे दाखलन:%s%s%sप्रवेश अपयशी अलिकडील अपयश पासून स्मृती बफर त्रुटीविभाग अपरिचीत आहेNIS गुप्तशब्द बदलविले जाऊ शकत नाही.नवीन गुप्तशब्द %s%sp: भूमिका %s करीता मुलभूत प्रकार आढळले नाही मेल आढळले नाही.विभाग निर्देशीत माहिती उपलब्ध नाहीगुप्तशब्द दिलेला नाहीवैध सुरक्षा संदर्भ नाहीपरवलीचा शब्द रद्द केले.पासवर्ड आधिपासूनच वापरले आहे.ह्या गुप्तशब्दचा आधीच वापर झाला आहे. दुसरा निवडा.गुप्तशब्द बदलविला नाहीगुप्तशब्द: परवानगी नाही%s पुन्हा प्रविष्ट करानवीन गुप्तशब्द %s%sp पुन्हा टाइप करा: नवीन STRESS गुप्तशब्द पुन्हा प्रविष्ट करा: नवीन UNIX गुप्तशब्द पुन्हा टाइप करा: सुरक्षा संदर्भ %s लागू केले गेलेसेवा त्रुटीमाफ करा, गुप्तशब्द जुळत नाही.यशबोधचिन्ह आढळले नाहीप्रणाली त्रुटीPAM ने रिटर्न मुल्य करीता दुर्लक्ष केले पाहिजेशेवटचे यशस्वी प्रवेश पासून %d अपयशी प्रवेश प्रयत्न आढळले.शेवटचे यशस्वी प्रवेश पासून %d अपयशी प्रवेश प्रयत्न आढळले गेले.शेवटचे यशस्वी प्रवेश पासून %d अपयशी प्रवेश प्रयत्न आढळले.'%s' करीता एकापेक्षा जास्त प्रवेश.डिरेक्ट्री '%s' बनवण्यास व प्रारंभ करण्यास अशक्य.%s करीता वैध संदर्भ प्राप्त करू शकले नाहीअपरिचीत PAM त्रुटीअपरिचित चूकअपरिचीत वापरकर्तावापरकर्ता खाते कालबाह्य झालेवापरकर्ता श्रेय कालबाह्य झालेअंतर्भूतीय अधिप्रमाणन विभाग करीता वापरकर्त्याची ओळख पटली नाहीतपासणी पूर्ण झाली नाही; गुप्तशब्द बदलविले नाहीसावधानता: तुमचे गुप्तशब्द %d दिवस अंतर्गत कालबाह्य होईलसावधानता: तुमचे गुप्तशब्द %d दिवस अंतर्गत कालबाह्य होईलसावधानता: तुमचे गुप्तशब्द %d दिवसात कालबाह्य होईलनवीन खात्यावर स्वागत आहे!तुम्हाला अन्य भूमिका किंवा स्तर प्रविष्ट करायला आवडेल?तुमचा गुप्तशब्द तत्काळ बदलण्याची आवश्यकता आहे (गुप्तशब्द जुना आहे)तुमचा गुप्तशब्द तत्काळ बदलण्याची आवश्यकता आहे (रूट वापरा)संचयीका %s अंतर्गत मेल आढळले गेले.मेल आढळले गेले.संचयीका %s अंतर्गत नवीन मेल आढळले.नवीन मेल प्राप्त झाले.संचयीका %s अंतर्गत मेल आढळले नाही.संचयीका %s अंतर्गत जुणे मेल आढळले.जुणे मेल आढळले गेले.तुम्ही मोठा गुप्तशब्द निवडला पाहीजेतुमचा गुप्तशब्द बदलण्यासाठी तुम्हाला बराच वेळ वाट पहावी लागेलतुमचे खाते बंद झाले आहे, कृपया तुमच्या संगणक व्यवस्थापकाकडे जाफक्त आकार बदलावकुठल्यातरी स्वरूपात वापरकर्ता नाव आढळलेमोनोटोनिक अक्षर श्रृंखला खूपच लांब आहेपाठोपाठ खूप जास्त समान अक्षर आढळलेसदोषीत संवाद (%d) PAM आरंभण्यात अपयशी pam_set_item() कार्यान्वीत करण्यास अपयशी पॅलींड्रोम आहेस्तर बदलविले गेलेप्रविष्ट केलेले जुण्या प्रमाणेच आहेप्रविष्ट केलेले जुण्या नुरूपच आहेखूपच सोपे आहेस्तर:दाखलन:दाखलन: विभाजन अपयशी: %mमेमरि वाटपवेळी त्रुटीअतिरिक्त अक्षर गट उपलब्ध नाहीभूमिका:Linux-PAM-1.1.8/po/ia.gmo0000644000000000000000000002743612216527620011654 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % ! >)_9Fs*A?6;v-9QOI2& HE ( 1  *!E/!*u!#!!(!"!!"&C"&j"$""B"#27#=j#@#+#$5$/M$}$$+$$&$%+"%N%!h%$%%5%& $&2& F&P&#n&!&$&&& ''&'<7't'H(P(5p(0(((() /)>P)/)`)0 *Q*1j*E*D*'+G+$V+{+*+&++ +),;B,4~,<,D,B5-x---!-*-".+2.!^...2..5./,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-12-17 22:00+0000 Last-Translator: Nik Kalach Language-Team: Interlingua MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ia Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y de %.*s via %.*s%s fallite: signal capturate %d%s%s fallite: codice de exito %d%s fallite: stato incognite 0x%x%s: Numero incorrecte fornite a --reset= %s: Impossibile de reinitiar tote le usatores a non-zero %s: Option non recognoscite %s %s: [--file percurso-integre] [--user usator] [--reset[=n]] [--quiet] %s: [-f percurso-integre] [--file percurso-integre] [-u usator] [--user usator] [-r] [--reset[=n]] [--quiet] Contrasigno UNIX (actual):...Le tempore ha perimite! ...Le tempore es perimente... Accesso permittite (le ultime accesso eveniva ante %ld secundas).Le conto es blocate a causa de %u insuccessos al authenticationLe conto es blocate temporarimente (%ld secundas remanente)Le application debe appellar a libpam de noveError de authenticationFallimento de authenticationImpossibile de recuperar le information de authenticationLe servicio de authentication non pote recuperar le information de authenticationLe servicio de authentication non pote obtener le credentiales del usatorPeremption del token de authentication disactivateLe token de authentication ha perimiteLe token de authentication non es jam valide; un nove token es necessariLe token de authentication pare occupateError de manipulation del token de authenticationCONTRASIGNO MALFORMATE: %sElemento incorrecte passate a pam_*_item()Impossibile de crear o eliminar un entrata pro le session specificateCambiamento del contrasigno STRESS pro %s.Cambiamento del contrasigno pro %s.Error de conversationConversation in expectation de un eventoCreation del directorio '%s'.Error critic - abandono immediateContexto de securitate predefinite %s Introduce le nove contrasigno STRESS: Introduce le nove contrasigno UNIX: Error in le modulo de servicioInsuccesso del controlo preliminar per le servicio de contrasignosInsuccesso de cargar un moduloInsuccesso al definition de credentiales de usatorIl ha superate le numero maxime de tentativas pro le servicioCredentiales insufficiente pro acceder a datos de authenticationContexto de creation de clave %s attribuiteUltime connexion fallite:%s%s%sUltime connexion:%s%s%sConto Fallimentos Ultime fallimento De Error de buffer de memoriaModulo incogniteLe contrasigno NIS non pote esser cambiate.Nove %s%scontrasigno: Necun typo predefinite pro le rolo %s Nulle currero.Nulle datos specific del modulo es presenteNecun contrasigno forniteContexto de securitate incorrecteCambiamento de contrasigno abortate.Le contrasigno se ha jam usate.Le contrasigno jam se ha utilisate. Selige un altere.Le contrasigno non ha cambiateContrasigno: Permission denegateRetypa %sRetypa nove %s%scontrasigno: Repete le nove contrasigno STRESS: Repete le nove contrasigno UNIX: Contexto de securitate %s attribuiteError de servicioLe contrasignos non es equal.SuccessoSymbolo non trovateError de systemaLe valor restitute debe esser ignorate per le repartitor PAMIl esseva %d insuccesso de initiar le session desde le ultime connexion.Il esseva %d insuccessos de initiar le session desde le ultime connexion.Il esseva %d insuccessos a initiar le session desde le ultime connexion.Troppo de connexiones pro '%s'.Impossibile de crear e de initiar le directorio '%s'.Impossibile de obtener un contexto valide pro %sError incognite de PAMError incogniteUsator incogniteLe conto del usator ha perimiteCredentiales del usator perimiteUsator es incognite pro le modulo de authentication subjacenteError al verification; contrasigno non cambiateAdvertimento: le contrasigno perimera in %d dieAdvertimento: le contrasigno perimera in %d diesAdvertimento: le contrasigno perimera in %d diesBenvenite al nove conto!Velle tu introducer un rolo e nivello differente?Le contrasigno es troppo vetule e debe esser cambiate immediatemente.Le administrator necessita le cambiamento immediate del contrasigno.Il ha currero in le dossier %s.Il ha currero.Il ha nove currero in le dossier %s.Il ha nove currero.Il non ha necun curreros in le dossier %s.Il ha currero vetule in le dossier %s.Il ha currero vetule.Selige un contrasigno plus longeAttende ancora pro cambiar le contrasignoLe conto ha perimite; contacte le administrator del systemanove contrasigno cambia solo le registro de litterasnove contrasigno contine le nomine de usator in alicun formanove contrasigno contine tro de characteres monotone in un sequentianove contrasigno contine troppo de characteres identic consequenteconversation erronee (%d) error al initiar PAM error in pam_set_item() nove contrasigno es un polindromonove contrasigno es un rotation del previenove contrasigno es equl al previenove contrasigno es troppo simile al previenove contrasigno es troppo simplenivello:conto:apertura de session: insuccesso de autoclonage: %merror al allocation de memorianove contrasigno non ha satis de classes de characterrolo:Linux-PAM-1.1.8/po/zh_TW.po0000644000000000000000000004141412216527620012142 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Terry Chuang , 2008-2009 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-12-16 08:46+0000\n" "Last-Translator: Cheng-Chia Tseng \n" "Language-Team: Chinese (Taiwan) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...時間已經超過...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...抱歉,您的時間已到!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "錯誤的交談 (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "密碼:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "新 %s%s密碼:" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "再次輸入新的 %s%s密碼:" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "抱歉,密碼不符合。" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "重新輸入 %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "已終止密碼變更作業。" #: libpam/pam_item.c:311 msgid "login:" msgstr "登入:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "成功" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "嚴重錯誤 - 立即終止" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "載入模組失敗" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "找不到符號" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "服務模組發生錯誤" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "系統錯誤" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "記憶體暫存區錯誤" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "許可權被拒絕" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "驗證失敗" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "憑證不足,無法存取驗證資料" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "驗證服務無法取出驗證資訊" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "底層的驗證模組無法識別使用者" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "服務的重試次數已超過最大數量" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "驗證記號已經失效;需要新的驗證記號" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "使用者帳戶已逾期" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "無法為指定的工作階段製作/移除項目" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "驗證服務無法取出使用者憑證" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "使用者憑證已逾期" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "無法設定使用者憑證" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "沒有模組的詳細資料" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "不良的項目傳送至 pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "交談錯誤" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "驗證記號處理錯誤" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "無法恢復驗證資訊" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "驗證記號鎖定忙碌" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "驗證記號計時已停用" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "密碼服務的初步檢查失敗" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "PAM 發送應忽略傳回值" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "未知的模組" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "驗證記號已逾期" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "交談正在等候事件" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "應用程式需要再次呼叫 libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "未知的 PAM 錯誤" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "與舊的密碼相同" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "記憶體分配錯誤" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "是一個回文" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "僅變更大小寫" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "與舊的密碼太相似" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "太簡單" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "已旋轉" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "字元類別不足" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "包含了太多連續的相同字元" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "包含過多的單調字元序段" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "包含了某些格式的用戶名稱" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "未提供密碼" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "密碼未變更" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "不良的密碼: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s 失敗:退出編碼 %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s 失敗:捕捉到信號 %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s 失敗:不明狀態 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "%a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "從 %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "在 %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "上一次登入:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "歡迎使用您的新帳號!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "上一次失敗的登入:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "自上次成功登入後,有 %d 次試圖登入但失敗的紀錄。" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "自從上次成功登入後有 %d 次嘗試登入失敗。" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "對 '%s' 進行太多次登入。" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "沒有郵件。" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "您有新的郵件。" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "您有舊的郵件。" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "您有郵件。" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "資料夾 %s 中沒有您的郵件。" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "資料夾 %s 中有您的新郵件。" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "資料夾 %s 中有您的舊郵件。" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "資料夾 %s 中有您的郵件。" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "建立目錄「%s」。" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "無法建立和初始化「%s」目錄。" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "密碼已經由其他使用者使用。請選擇其他密碼。" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "密碼已被使用過。" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "預設的安全網路位置 %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "您是否希望輸入不同的角色或層級?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "角色:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "%s 沒有預設的類型\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "層級:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "不是有效的安全網路位置" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "無法取得 %s 的有效 context" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "已指定安全網路位置 %s" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "已指建置金鑰的定安全網路位置 %s" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "起始 PAM 失敗\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() 失敗\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "登入:失敗的分叉:%m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "正在更改 %s 的 STRESS 密碼。" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "輸入新的 STRESS 密碼:" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "再次輸入新的 STRESS 密碼:" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "確認錯誤輸入;密碼未變更" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "帳號暫時被鎖住(還剩下 %ld 秒)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "因為嘗試登入 %u 次失敗,帳號已被封鎖" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "驗證錯誤" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "服務錯誤" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "未知的使用者" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "未知的錯誤" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: 不良的號碼提供至 --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: 未識別的選項 %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: 無法將所有使用者重新設定為非零\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Failures Latest failure From\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "已賦予存取權限(最後一次存取為 %ld 秒前)。" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "您的帳戶已經逾期,請洽詢您的系統管理員" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "您必須立刻變更您的密碼 (root 強制執行)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "您必須立刻變更您的密碼 (密碼使用過久)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "警告:您的密碼將於 %d 天內過期" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "警告:您的密碼將在 %d 天之後過期。" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "無法變更 NIS 密碼。" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "您必須選擇更長的密碼" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "正在更改 %s 的 STRESS 密碼。" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(目前的)UNIX 密碼:" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "您必須久候,以更改您的密碼" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "輸入新的 UNIX 密碼:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "再次輸入新的 UNIX 密碼:" Linux-PAM-1.1.8/po/ur.po0000644000000000000000000003221112216527620011530 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Urdu \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ur\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/ca.po0000644000000000000000000004424412216527617011504 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Albert Carabasa Giribet , 2009 # Bernabé Borrero , 2012 # Robert Antoni Buj i Gelonch , 2013 # xqueralt , 2008 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-08-13 21:44+0000\n" "Last-Translator: Robert Antoni Buj i Gelonch \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...S'acaba el temps...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...S'ha acabat el temps.\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "conversa errònia (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Contrasenya: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nova contrasenya de %s%s: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Torneu a escriure la nova contrasenya de %s%s: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Les contrasenyes no coincideixen." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Torneu a escriure %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "No s'ha canviat la contrasenya." #: libpam/pam_item.c:311 msgid "login:" msgstr "entrada:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Correcte" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Error greu - s'avortarà l'operació immediatament" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Ha fallat en carregar el mòdul" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "No es troba el símbol" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Error en el mòdul de servei" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Error del sistema" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Error de la memòria intermèdia" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Permís denegat" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Error d'autenticació" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" "No teniu suficients credencials per a accedir a les dades d'autenticació" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "El servei d'autenticació no pot recuperar la informació corresponent" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Usuari desconegut per al mòdul d'autenticació subjacent" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "S'ha exhaurit el nombre màxim d'intents per al servei" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "El testimoni d'autenticació ja no és vàlid; se'n necessita un de nou" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "El compte d'usuari ha vençut" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "No es pot crear/suprimir una entrada per a la sessió especificada" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "El servei d'autenticació no pot recuperar les credencials d'usuari" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Les credencials d'usuari han caducat" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "S'ha produït un error en definir les credencials d'usuari" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "No hi han dades específiques del mòdul" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "S'ha transmès un element incorrecte a pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Error de conversa" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Error de manipulació del testimoni d'autenticació" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "No es pot recuperar la informació d'autenticació" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "El bloqueig del testimoni d'autenticació està ocupat" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "L'envelliment del testimoni d'autenticació està inhabilitat" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Error durant la comprovació preliminar del servei de contrasenyes" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "El lliurament de PAM hauria d'ignorar el valor de retorn" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "El mòdul és desconegut" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "El testimoni d'autenticació ha caducat" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "La conversa està esperant un esdeveniment" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "L'aplicació necessita cridar novament libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Error de PAM desconegut" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "és la mateixa que l'antiga" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "Error d'assignació de memòria" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "és un palíndrom" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "només canvien les majúscules i minúscules" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "és massa semblant a l'antiga" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "és massa senzilla" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "està girada" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "no hi ha suficients classes de caràcters" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "conté massa caràcters idèntics consecutius" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "conté una seqüència de caràcters monòtona massa llarga" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "conté el nom d'usuari d'alguna forma" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "No s'ha proporcionat cap contrasenya" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "No s'ha canviat la contrasenya" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "CONTRASENYA INCORRECTA: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s ha fallat: codi de sortida %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s ha fallat: s'ha atrapat el senyal %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s ha fallat: estat 0x%x desconegut" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " des de %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " a %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Darrera entrada:%s des de %s a %s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Benvingut al vostre nou compte!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Darrera entrada fallida:%s des de %s a %s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "S'ha intentat entrar %d cop des de l'última entrada correcta." msgstr[1] "S'ha intentat entrar %d cops des de l'última entrada correcta." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "S'ha intentat entrar %d cops des de l'última entrada correcta." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Massa entrades per a '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Sense correu." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Teniu correu nou." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Teniu correu antic." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Teniu correu." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "No teniu cap correu a la carpeta %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Teniu nou correu a la carpeta %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Teniu correu antic a la carpeta %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Teniu correu a la carpeta %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Creant el directori '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "No s'ha pogut crear i inicialitzar el directori '%s'." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Aquesta contrasenya ja s'ha fet servir. Trieu-ne una altra." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "La contrasenya ja ha estat utilitzada." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Context de seguretat per defecte %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Voleu introduir un rol o nivell diferent?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rol:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "El rol %s no disposa de cap tipus per defecte\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "nivell:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "No és un context de seguretat vàlid" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "No s'ha pogut obtenir el context vàlid per a %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Context de seguretat %s assignat" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Context de creació de claus %s assignat" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "s'ha produït un error en inicialitzar PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "s'ha produït un error en pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "entrada: ha fallat la bifurcació: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "S'està canviant la contrasenya d'STRESS per a %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Introduïu la nova contrasenya d'STRESS: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Torneu a escriure la nova contrasenya d'STRESS: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" "Error d'escriptura durant la verificació; no s'ha canviat la contrasenya" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Compte bloquejat temporalment (queden %ld segons)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" "El compte ha estat bloquejat ja que s'ha intentat entrar %u cops sense èxit" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Error d'autenticació" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Error del servei" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Usuari desconegut" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Error desconegut" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: número incorrecte assignat a --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: opció %s no reconeguda\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file nom_fitxer_arrel] [--user nom_usuari] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: no es poden restablir tots els usuaris a un valor diferent de zero\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Entrada Fallades Última fallada Des de\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f nom_fitxer_arrel] [--file nom_fitxer_arrel]\n" " [-u nom_usuari] [--user nom_usuari]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Accés permès (l'últim accés va ser fa %ld segons)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "El vostre compte ha caducat. Contacteu amb l'administrador del sistema" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" "Heu de canviar la contrasenya immediatament (us hi obliga l'administrador)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Heu de canviar la contrasenya immediatament (la contrasenya és antiga)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Atenció: la contrasenya venç d'aquí a %d dia" msgstr[1] "Atenció: la contrasenya venç d'aquí a %d dies" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Atenció: la contrasenya venç d'aquí a %d dies" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "No s'ha pogut canviar la contrasenya NIS." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Heu de triar una contrasenya més llarga" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "S'està canviant la contrasenya de %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "contrasenya (actual) d'UNIX: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Heu d'esperar més temps abans de canviar la contrasenya" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Introduïu la nova contrasenya d'UNIX: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Torneu a escriure la nova contrasenya d'UNIX: " Linux-PAM-1.1.8/po/ga.po0000644000000000000000000004552712216527617011515 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # leftmostcat , 2012 # leftmostcat , 2012-2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-09-10 18:14+0000\n" "Last-Translator: leftmostcat \n" "Language-Team: Irish (http://www.transifex.com/projects/p/fedora/language/" "ga/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ga\n" "Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " "4);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Tá am ag imeacht...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Tá brón orm, tá do chuid ama imithe!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "comhrá earráideach (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Focal faire: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Focal faire%2$s%1$s nua: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Iontráil focal faire%2$s%1$s nua arís: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Tá brón orm, ní ionann na focail fhaire." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Iontráil %s arís" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Tobscoireadh athrú focail faire." #: libpam/pam_item.c:311 msgid "login:" msgstr "logáil isteach:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "D'éirigh leis" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Earráid chriticiúil - tobscor láithreach" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Theip ar luchtú modúil" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Siombail gan aimsiú" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Earráid i modúl seirbhíse" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Earráid chórais" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Earráid mhaolán cuimhne" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Diúltaíodh cead" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Teip fíordheimhnithe" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Níl cead agat sonraí fhíordheimhnithe a rochtain" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" "Ní féidir leis an tseirbhís fhíordheimhnithe faisnéis fhíordheimhnithe a " "fháil" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Níl aithne ar an úsáideoir ag an modúl fíordheimhnithe bunúsach" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Líon uasta na hatrialacha don tseirbhís ídithe" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" "Níl an ceadchomhartha fíordheimhnithe bailí a thuilleadh; ceann nua de dhíth" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Chuaigh an cuntas úsáideora as feidhm" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Ní féidir iontráil don tseirbhís sonraithe a dhéanamh/bhaint" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "Ní féidir leis an tseirbhís fhíordheimhnithe dintiúir úsáideora a fháil" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Chuaigh dintiúir úsáideora as feidhm" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Theip ar shocrú dintiúir úsáideora" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Níl aon sonraí shainiúil don mhodúl ann" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Tugadh drochmhír do pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Earráid chomhrá" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Earráid ionramháil an cheadchomhartha fíordheimhnithe" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Ní féidir faisnéis fhíordheimhnithe a fháil ar ais" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Tá glas an cheadchomhartha fíordheimhnithe gnóthach" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Díchumasaíodh dul in aois cheadchomharthaí fíordheimhnithe" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Theip ar réamhsheiceáil ag an tseirbhís fhocail faire" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Ba chóir don seoladh PAM neamhaird a dhéanamh ar an luach fillte" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Tá an modúl anaithnid" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Chuaigh an ceadchomhartha fíordheimhnithe as feidhm" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Tá an comhrá ag fanacht le teagmhas" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Ní mór don fheidhmchlár libpam a ghlaoch arís" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Earráid PAM anaithnid" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "tá sé díreach cosúil leis an seancheann" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "earráid dála chuimhne" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "is palandróm é" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "athruithe cáis amháin" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "tá sé ró-chosúil leis an seancheann" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "tá sé ró-shimplí" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "tá sé rothlaithe" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "níl go leor aicmí carachtar ann" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "tá an iomarca carachtar céanna ann go leantach" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "tá seicheamh carachtar aontonach ró-fhada ann" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "tá an t-ainm úsáideora ann i bhfoirm éigin" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Níor soláthraíodh aon fhocal faire" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Níor athraíodh an focal faire" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "DROCHFHOCAL FAIRE: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "Theip %s: cód scortha %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "Theip %s: fuarthas comhartha %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "Theip %s: stádas anaithnid 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %e %b %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " ó %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " ar %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Logáil isteach is déanaí:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Fáilte go dtí do chuntas nua!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Logáil isteach teipthe is déanaí:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a\n" "d'éirigh leis." msgstr[1] "" "Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a\n" "d'éirigh leis." msgstr[2] "" "Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a\n" "d'éirigh leis." msgstr[3] "" "Bhí %d n-iarracht logála isteach teipthe ann ón logáil isteach is déanaí\n" "a d'éirigh leis." msgstr[4] "" "Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a\n" "d'éirigh leis." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a\n" "d'éirigh leis." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "An iomarca logálacha isteach do '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Níl aon phost ann." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Tá post nua agat." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Tá seanphost agat." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Tá post agat." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Níl aon phost agat i bhfillteán %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Tá post nua agat i bhfillteán %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Tá seanphost agat i bhfillteán %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Tá post agat i bhfillteán %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Comhadlann '%s' á cruthú." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Ní féidir comhadlann '%s' a chruthú agus a thúsú." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Úsáidtear an focal faire cheana. Roghnaigh ceann eile." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Úsáidtear an focal faire cheana." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Comhthéacs Réamhshocraithe Slándála %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "An bhfuil fonn ort ról nó leibhéal difriúil a iontráil?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ról:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Níl aon chineál réamhshocraithe ann do ról %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "leibhéal:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Ní comhthéacs bailí slándála é" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Ní féidir comhthéacs bailí a fháil do %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Sannadh Comhthéacs Slándála %s" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Sannadh Comhthéacs Chruthú Eochracha %s" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "theip ar thúsú PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "theip ar pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "logáil isteach: theip ar dhéanamh foirc: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Focal faire STRESS do %s á athrú." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Iontráil focal faire STRESS nua: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Iontráil focal faire STRESS nua arís: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Clóscríobhadh deimhniú go mícheart; níor athraíodh focal faire" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Cuireadh an cuntas faoi ghlas go sealadach (%ld soicind fágtha)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Cuireadh an cuntas faoi ghlas mar gheall ar %u logáil isteach teipthe" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Earráid fhíordheimhnithe" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Earráid seirbhíse" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Úsáideoir anaithnid" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Earráid anaithnid" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Tugadh drochuimhir do --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Rogha anaithnid %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file ainm-comhad-le-fréamh] [--user úsáideoir] [--reset[=u]]\n" "[--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Ní féidir gach úsáideoir a athrú go neamhnialasach\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Logáil isteach Teipeanna Teip is déanaí Ó\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f ainm-comhad-le-fréamh] [--file ainm-comhad-le-fréamh]\n" " [-u úsáideoir] [--user úsáideoir]\n" " [-r] [--reset[=u]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Bronnadh rochtain (bhí an rochtain is déanaí %ld soicind ó shin)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "Chuaigh do chuntas as feidhm; déan téagmháil le do riarthóir córais, le do " "thoil" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Ní mór duit d'fhocal faire a athrú láithreach (forfheidhmítear fréamh)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" "Ní mór duit d'fhocal faire a athrú láithreach (chuaigh focal faire in aos)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá" msgstr[1] "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá" msgstr[2] "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá" msgstr[3] "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá" msgstr[4] "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Rabhadh: rachaidh d'fhocal faire as feidhm i gceann %d lá" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Níorbh fhéidir focal faire NIS a athrú." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Caithfidh tú focal faire níos faide a roghnú" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Focal faire %s á athrú." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "Focal faire UNIX (reatha): " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Caithfidh tú fanacht níos faide chun d'fhocal faire a athrú" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Iontráil focal faire UNIX nua: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Iontráil focal faire UNIX nua arís:" Linux-PAM-1.1.8/po/kn.po0000644000000000000000000006046412216527617011533 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # shanky , 2013 # shanky , 2012 # shankar , 2007-2009 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-15 08:49+0000\n" "Last-Translator: shanky \n" "Language-Team: Kannada (http://www.transifex.com/projects/p/fedora/language/" "kn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kn\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...ಸಮಯ ಸರಿಯುತ್ತಿದೆ...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಸಮಯ ಮುಗಿಯಿತು!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "ದೋಷಪೂರಿತ ಸಂವಾದ (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "ಗುಪ್ತಪದ: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "ಹೊಸ %s%sಗುಪ್ತಪದ: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "ಹೊಸ %s%sಗುಪ್ತಪದವನ್ನು ಪುನರ್ ಟೈಪಿಸಿ: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "ಕ್ಷಮಿಸಿ, ಗುಪ್ತಪದಗಳು ತಾಳೆಯಾಗುತ್ತಿಲ್ಲ." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s ಅನ್ನು ಮರಳಿ ನಮೂದಿಸಿ" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "ಗುಪ್ತಪದ ಬದಲಾವಣೆಯನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಲಾಗಿದೆ." #: libpam/pam_item.c:311 msgid "login:" msgstr "ಲಾಗಿನ್:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "ಯಶಸ್ಸು" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "ಸಂದಿಗ್ಧ ದೋಷ - ತಕ್ಷಣ ಸ್ಥಗಿತಗೊಳಿಸು" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "ಮಾಡ್ಯೂಲನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "ಸಂಜ್ಞೆ ಪತ್ತೆಯಾಗಿಲ್ಲ" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "ಸೇವಾ ಮಾಡ್ಯೂಲಿನಲ್ಲಿ ದೋಷ" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "ವ್ಯವಸ್ಥೆಯ ದೋಷ" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "ಮೆಮೊರಿ ಬಫರ್ ದೋಷ" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "ಅನುಮತಿಯನ್ನು ನಿರಾಕರಿಸಲಾಗಿದೆ" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "ದೃಢೀಕರಣವು ವಿಫಲಗೊಂಡಿದೆ" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "ದೃಢೀಕರಣ ದತ್ತಾಂಶವನ್ನು ನಿಲುಕಿಸಿಕೊಳ್ಳಲು ರುಜುವಾತು ಸಾಕಷ್ಟು ಇಲ್ಲ" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "ದೃಢೀಕರಣ ಸೇವೆಯು ದೃಢೀಕರಣ ಮಾಹಿತಿಯನ್ನು ಹಿಂಪಡೆಯಲು ಆಗುತ್ತಿಲ್ಲ" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "ಕೆಳಗಿರುವ ದೃಢೀಕರಣ ಮಾಡ್ಯೂಲಿಗೆ ಬಳಕೆದಾರನ ಬಗ್ಗೆ ತಿಳಿದಿಲ್ಲ್ಲ" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "ಸೇವೆಗಾಗಿನ ಗರಿಷ್ಟ ಸಂಖ್ಯೆಯ ಪುನರ್ ಪ್ರಯತ್ನಗಳೆಲ್ಲಾ ಖಾಲಿಯಾಗಿವೆ" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "ದೃಢೀಕರಣ ಸಂಕೇತವು ಅಮಾನ್ಯವಾಗಿದೆ; ಹೊಸದೊಂದರ ಅಗತ್ಯವಿದೆ" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "ಬಳಕೆದಾರ ಖಾತೆಯು ಅವಧಿ ಅಂತ್ಯವಾಗಿದೆ" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "ನಿಗದಿತ ಸೆಶನ್ನಿಗೆ ಒಂದು ನಮೂದನ್ನು ಮಾಡಲು/ತೆಗೆದುಹಾಕಲು ಆಗುತ್ತಿಲ್ಲ" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "ದೃಢೀಕರಣ ಸೇವೆಗೆ ಬಳಕೆದಾರನ ರುಜುವಾತುಗಳನ್ನು ಹಿಂಪಡೆಯಲು ಆಗುತ್ತಿಲ್ಲ" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "ಬಳಕೆದಾರ ರುಜುವಾತುಗಳ ಅವಧಿ ಅಂತ್ಯಗೊಂಡಿದೆ" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "ಬಳಕೆದಾರ ರುಜುವಾತುಗಳನ್ನು ಸಂಯೋಜಿಸುವಲ್ಲಿ ವಿಫಲತೆ" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "ಮಾಡ್ಯೂಲ್ ನಿಶ್ಚಿತ ದತ್ತಾಂಶವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item() ಗೆ ಒಂದು ಕೆಟ್ಟ ಅಂಶವನ್ನು ರವಾನಿಸಲಾಗಿದೆ" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "ಸಂವಾದಾತ್ಮಕ ದೋಷ" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "ದೃಢೀಕರಣ ಸಂಕೇತದ ಕುಶಲ ನಿರ್ವಹಣೆಯಲ್ಲಿನ ದೋಷ" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "ದೃಢೀಕರಣ ಮಾಹಿತಿಯನ್ನು ಮರುಗಳಿಸಲು ಆಗುವುದಿಲ್ಲ" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "ದೃಢೀಕರಣ ಸಂಕೇತ ಲಾಕ್ ಕಾರ್ಯಮಗ್ನವಾಗಿದೆ" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "ದೃಢೀಕರಣ ಸಂಕೇತದ ಕಾಲಾವಧಿ ಮೀರುವುದನ್ನು ಅಶಕ್ತಗೊಳಿಸಲಾಗಿದೆ" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "ಗುಪ್ತಪದ ಸೇವೆಯ ಪ್ರಾಥಮಿಕ ಪರೀಕ್ಷೆಗಳು ವಿಫಲಗೊಂಡಿವೆ" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "ಮರಳುವ ಮೌಲ್ಯವನ್ನು PAM ರವಾನೆಯಿಂದ ಅಲಕ್ಷಿಸಬೇಕು" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "ಮಾಡ್ಯೂಲು ತಿಳಿದಿಲ್ಲ" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "ದೃಢೀಕರಣ ಸಂಕೇತದ ಅವಧಿ ಅಂತ್ಯಗೊಂಡಿದೆ" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "ಸಂವಾದವು ಕಾರ್ಯಕ್ರಮಕ್ಕಾಗಿ ಕಾಯುತ್ತಿದೆ" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "ಅನ್ವಯವು libpam ಅನ್ನು ಪುನಃ ಕರೆಯಬೇಕಿದೆ" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "ಗೊತ್ತಿರದ PAM ದೋಷ" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "ಇದು ಹಳೆಯದರ ಹಾಗೆಯೇ ಇದೆ" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "ಮೆಮೊರಿ ನಿಯೋಜನಾ ದೋಷ" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "ಇದು ಒಂದು ಸಮಾನ ಪೂರ್ವಾಪರವಾಗಿದೆ (palindrome)" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "ಕೇವಲ ಕೇಸ್ ಗಳ ಬದಲಾವಣೆಯಾಗಿದೆ ಅಷ್ಟೆ" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ಇದು ಹಳೆಯದಕ್ಕೆ ಬಹಳಷ್ಟು ಹೋಲುತ್ತದೆ" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "ಇದು ಬಹಳ ಸರಳವಾಗಿದೆ" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "ಇದು ತಿರುಗಿಸಲಾಗಿದೆ" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "ಸಾಕಷ್ಟು ಕ್ಯಾರೆಕ್ಟರ್ ವರ್ಗಗಳು ಇಲ್ಲ" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "ಇದು ಒಂದೇ ಬಗೆಯ ಬಹಳಷ್ಟು ಕ್ಯಾರೆಕ್ಟರುಗಳನ್ನು ಅನುಕ್ರಮವಾಗಿ ಹೊಂದಿದೆ" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "ಇದು ಒಂದೇ ಬಗೆಯ ಉದ್ದನೆಯ ಅಕ್ಷರಗಳ ಅನುಕ್ರಮವನ್ನು ಹೊಂದಿದೆ" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "ಇದು ಯಾವುದೊ ಒಂದು ಬಗೆಯಲ್ಲಿ ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಒಳಗೊಂಡಿದೆ" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "ಯಾವುದೇ ಗುಪ್ತಪದ ನೀಡಲಾಗಿಲ್ಲ" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "ಗುಪ್ತಪದ ಬದಲಾಗಿಲ್ಲ" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ಕೆಟ್ಟ ಗುಪ್ತಪದ: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s ವಿಫಲಗೊಂಡಿದೆ: ನಿರ್ಗಮಿಸಲು ಸಂಜ್ಞೆ %d " #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s ವಿಫಲಗೊಂಡಿದೆ: ಹಿಡಿಯಲಾದ ಸೂಚನೆ %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s ವಿಫಲಗೊಂಡಿದೆ: ಗೊತ್ತಿರದ ಸ್ಥಿತಿ 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s ನಿಂದ" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s ನಲ್ಲಿ" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "ಕೊನೆಯ ಲಾಗಿನ್:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "ನಿಮ್ಮ ಹೊಸ ಖಾತೆಗೆ ಸುಸ್ವಾಗತ!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "ಕೊನೆಯ ಲಾಗಿನ್:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "ಕೊನೆಯ ಬಾರಿಯ ಯಶಸ್ವಿ ಪ್ರವೇಶದ ನಂತರ %d ವಿಫಲಗೊಂಡ ಪ್ರಯತ್ನಗಳಿವೆ." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "ಕೊನೆಯ ಬಾರಿಯ ಯಶಸ್ವಿ ಪ್ರವೇಶದ ನಂತರ %d ಪ್ರವೇಶದ ಪ್ರಯತ್ನಗಳು ವಿಫಲಗೊಂಡಿದೆ." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s'ಗಾಗಿ ಬಹಳಷ್ಟು ಲಾಗಿನ್ನುಗಳು." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "ಯಾವುದೇ ಮೈಲ್ ಇಲ್ಲ." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "ನಿಮಗಾಗಿ ಹೊಸ ಮೈಲ್ ಇದೆ." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "ನಿಮಗಾಗಿ ಹಳೆ ಮೈಲ್ ಇದೆ." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "ನಿಮಗಾಗಿ ಮೈಲ್ ಇದೆ." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "%s ಫೋಲ್ಡರಿನಲ್ಲಿ ನಿಮಗಾಗಿ ಯಾವುದೆ ಮೈಲ್ ಇಲ್ಲ." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "%s ಫೋಲ್ಡರಿನಲ್ಲಿ ನಿಮಗಾಗಿ ಹೊಸ ಮೈಲ್ ಇದೆ." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "%s ಫೋಲ್ಡರಿನಲ್ಲಿ ನಿಮಗಾಗಿ ಹಳೆ ಮೈಲ್ ಇದೆ." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "%s ಫೋಲ್ಡರಿನಲ್ಲಿ ನಿಮಗಾಗಿ ಮೈಲ್ ಇದೆ." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "ಕೋಶ '%s' ಅನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "ಕೋಶ '%s' ಅನ್ನು ರಚಿಸಲು ಹಾಗು ಆರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "ಗುಪ್ತಪದವು ಈಗಾಗಲೆ ಬಳಸಲ್ಪಟ್ಟಿದೆ. ಬೇರೊಂದನ್ನು ಬಳಸಿ." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "ಗುಪ್ತಪದವನ್ನು ಈಗಾಗಲೆ ಬಳಸಲಾಗಿದೆ." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "ಡೀಫಾಲ್ಟ್‍ ಸುರಕ್ಷತಾ ಸನ್ನಿವೇಶ %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "ನೀವು ನೀವು ಬೇರೊಂದು ಪಾತ್ರ ಅಥವ ಮಟ್ಟವನ್ನು ದಾಖಲಿಸಲು ಇಚ್ಛಿಸುತ್ತೀರ?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ಪಾತ್ರ:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "%s ಪಾತ್ರಕ್ಕಾಗಿ ಯಾವುದೆ ಡೀಫಾಲ್ಟ್‍ ಬಗೆ ಇಲ್ಲ\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "ಮಟ್ಟ:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "ಸಮಂಜಸವಾದ ಸುರಕ್ಷತಾ ಸನ್ನಿವೇಶ ಅಲ್ಲ" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s ಗಾಗಿ ಮಾನ್ಯವಾದ ಸನ್ನಿವೇಶವನ್ನು ಪಡೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "ಸುರಕ್ಷತಾ ಸನ್ನಿವೇಶ %s ವನ್ನು ನಿಯೋಜಿಸಲಾಗಿದೆ" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "ಕೀಲಿ ನಿರ್ಮಾಣ ಸನ್ನಿವೇಶ %s ವನ್ನು ನಿಯೋಜಿಸಲಾಗಿದೆ" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM ಅನ್ನು ಆರಂಭಿಸುವಲ್ಲಿನ ವಿಫಲತೆ\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() ಮಾಡುವಲ್ಲಿ ವಿಫಲತೆ\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "ಲಾಗಿನ್: ಫೋರ್ಕಿಂಗ್ ಮಾಡುವಲ್ಲಿ ವಿಫಲತೆ:%m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s ಗಾಗಿ STRESS ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "ಹೊಸ STRESS ಗುಪ್ತಪದವನ್ನು ಟೈಪಿಸಿ: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "ಹೊಸ STRESS ಗುಪ್ತಪದವನ್ನು ಪುನಃ ಟೈಪಿಸಿ: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "ತಪಾಸಣೆಗೆ ಟೈಪಿಸಿದ್ದು ತಪ್ಪಾಗಿದೆ; ಗುಪ್ತಪದ ಬದಲಾಗಿಲ್ಲ" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "ಖಾತೆಯನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ (%ld ಸೆಕೆಂಡುಗಳು ಉಳಿದಿವೆ)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "ವಿಫಲಗೊಂಡ %u ಪ್ರವೇಶಗಳಿಂದಾಗಿ ಖಾತೆಯನ್ನು ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "ದೃಢೀಕರಣ ದೋಷ" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "ಸೇವಾ ದೋಷ" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "ಗೊತ್ತಿರದ ಬಳಕೆದಾರ" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "ಗೊತ್ತಿರದ ದೋಷ" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset= ಗೆ ಕೊಡಲಾದ ಕೆಟ್ಟ ಸಂಖ್ಯೆ\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: ಗುರುತಿಸಲಾಗದ ಆಯ್ಕೆ %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: ಎಲ್ಲಾ ಬಳಕೆದಾರರನ್ನು ಶೂನ್ಯವಲ್ಲದುದಕ್ಕೆ ಪುನರ್ ಸಂಯೋಜಿಸಲು ಆಗುವುದಿಲ್ಲ\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "ಪ್ರವೇಶ ವಿಫಲತೆಗಳು ಇತ್ತೀಚಿನ ವಿಫಲತೆ ಇಂದ\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" "ಅನುಮತಿಯನ್ನು ನೀಡಲಾಗಿದೆ (ಕೊನೆಯ ಬಾರಿಗೆ %ld ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ ನಿಲುಕಿಸಿಕೊಳ್ಳಲಾಗಿತ್ತು)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "ನಿಮ್ಮ ಖಾತೆಯ ಅವಧಿ ಅಂತ್ಯಗೊಂಡಿದೆ; ದಯವಿಟ್ಟು ನಿಮ್ಮ ಗಣಕ ವ್ಯವಸ್ಥಾಪಕರನ್ನು ಸಂಪರ್ಕಿಸಿ" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "ನೀವು ಈ ಕೂಡಲೆ ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಿಸುವ ಅಗತ್ಯವಿದೆ (ಮೂಲದಿಂದ ಒತ್ತಾಯಿತವಾಗಿದೆ)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" "ನೀವು ಈ ಕೂಡಲೆ ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಿಸುವ ಅಗತ್ಯವಿದೆ (ಗುಪ್ತಪದವು ಬಹಳ ಹಳೆಯದಾಗಿದೆ)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "ಎಚ್ಚರಿಕೆ: ನಿಮ್ಮ ಗುಪ್ತಪದದ ವಾಯಿದೆಯು %d ದಿನಗಳ ನಂತರ ತೀರಿಹೋಗುತ್ತದೆ" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "ಎಚ್ಚರಿಕೆ: %d ದಿನಗಳಲ್ಲಿ ನಿಮ್ಮ ಗುಪ್ತಪದದ ಅವಧಿ ಅಂತ್ಯಗೊಳ್ಳುತ್ತದೆ" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ್ಲ." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "ನೀವು ಒಂದು ಉದ್ದವಾದ ಗುಪ್ತಪದವನ್ನು ಆರಿಸಬೇಕು" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s ಗಾಗಿ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(ಪ್ರಸ್ತುತ) UNIX ಗುಪ್ತಪದ: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲು ನೀವು ಬಹಳ ಸಮಯ ಕಾಯಬೇಕು" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "ಹೊಸ UNIX ಗುಪ್ತಪದವನ್ನು ದಾಖಲಿಸಿ: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "ಹೊಸ UNIX ಗುಪ್ತಪದವನ್ನು ಪುನಃ ಟೈಪಿಸಿ: " Linux-PAM-1.1.8/po/ca.gmo0000644000000000000000000002754612216527620011650 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % )  4#U+yGJ {U 6!LX1-21FdC='- GU 6 3 !3#!BW!2!&!!*"1"2K"$~")"'""B#U#:u#6#I#(1$)Z$!$6$ $$)%A%.\% %(%$%%% &&-&;T&& &&&/&0'.C' r''!''''8'~1(?((5 )0A)r))))$)9)I**`t*0*+)&+GP+J++ ,!,1,$C,#h,,(,8,F-,I-%v-;---.+.)J.t. ......%./)7/a/,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-08-13 21:44+0000 Last-Translator: Robert Antoni Buj i Gelonch Language-Team: Catalan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ca Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y des de %.*s a %.*s%s ha fallat: s'ha atrapat el senyal %d%s%s ha fallat: codi de sortida %d%s ha fallat: estat 0x%x desconegut%s: número incorrecte assignat a --reset= %s: no es poden restablir tots els usuaris a un valor diferent de zero %s: opció %s no reconeguda %s: [--file nom_fitxer_arrel] [--user nom_usuari] [--reset[=n]] [--quiet] %s: [-f nom_fitxer_arrel] [--file nom_fitxer_arrel] [-u nom_usuari] [--user nom_usuari] [-r] [--reset[=n]] [--quiet] contrasenya (actual) d'UNIX: ...S'ha acabat el temps. ...S'acaba el temps... Accés permès (l'últim accés va ser fa %ld segons).El compte ha estat bloquejat ja que s'ha intentat entrar %u cops sense èxitCompte bloquejat temporalment (queden %ld segons)L'aplicació necessita cridar novament libpamError d'autenticacióError d'autenticacióNo es pot recuperar la informació d'autenticacióEl servei d'autenticació no pot recuperar la informació corresponentEl servei d'autenticació no pot recuperar les credencials d'usuariL'envelliment del testimoni d'autenticació està inhabilitatEl testimoni d'autenticació ha caducatEl testimoni d'autenticació ja no és vàlid; se'n necessita un de nouEl bloqueig del testimoni d'autenticació està ocupatError de manipulació del testimoni d'autenticacióCONTRASENYA INCORRECTA: %sS'ha transmès un element incorrecte a pam_*_item()No es pot crear/suprimir una entrada per a la sessió especificadaS'està canviant la contrasenya d'STRESS per a %s.S'està canviant la contrasenya de %s.Error de conversaLa conversa està esperant un esdevenimentCreant el directori '%s'.Error greu - s'avortarà l'operació immediatamentContext de seguretat per defecte %s Introduïu la nova contrasenya d'STRESS: Introduïu la nova contrasenya d'UNIX: Error en el mòdul de serveiError durant la comprovació preliminar del servei de contrasenyesHa fallat en carregar el mòdulS'ha produït un error en definir les credencials d'usuariS'ha exhaurit el nombre màxim d'intents per al serveiNo teniu suficients credencials per a accedir a les dades d'autenticacióContext de creació de claus %s assignatDarrera entrada fallida:%s des de %s a %sDarrera entrada:%s des de %s a %sEntrada Fallades Última fallada Des de Error de la memòria intermèdiaEl mòdul és desconegutNo s'ha pogut canviar la contrasenya NIS.Nova contrasenya de %s%s: El rol %s no disposa de cap tipus per defecte Sense correu.No hi han dades específiques del mòdulNo s'ha proporcionat cap contrasenyaNo és un context de seguretat vàlidNo s'ha canviat la contrasenya.La contrasenya ja ha estat utilitzada.Aquesta contrasenya ja s'ha fet servir. Trieu-ne una altra.No s'ha canviat la contrasenyaContrasenya: Permís denegatTorneu a escriure %sTorneu a escriure la nova contrasenya de %s%s: Torneu a escriure la nova contrasenya d'STRESS: Torneu a escriure la nova contrasenya d'UNIX: Context de seguretat %s assignatError del serveiLes contrasenyes no coincideixen.CorrecteNo es troba el símbolError del sistemaEl lliurament de PAM hauria d'ignorar el valor de retornS'ha intentat entrar %d cop des de l'última entrada correcta.S'ha intentat entrar %d cops des de l'última entrada correcta.S'ha intentat entrar %d cops des de l'última entrada correcta.Massa entrades per a '%s'.No s'ha pogut crear i inicialitzar el directori '%s'.No s'ha pogut obtenir el context vàlid per a %sError de PAM desconegutError desconegutUsuari desconegutEl compte d'usuari ha vençutLes credencials d'usuari han caducatUsuari desconegut per al mòdul d'autenticació subjacentError d'escriptura durant la verificació; no s'ha canviat la contrasenyaAtenció: la contrasenya venç d'aquí a %d diaAtenció: la contrasenya venç d'aquí a %d diesAtenció: la contrasenya venç d'aquí a %d diesBenvingut al vostre nou compte!Voleu introduir un rol o nivell diferent?Heu de canviar la contrasenya immediatament (la contrasenya és antiga)Heu de canviar la contrasenya immediatament (us hi obliga l'administrador)Teniu correu a la carpeta %s.Teniu correu.Teniu nou correu a la carpeta %s.Teniu correu nou.No teniu cap correu a la carpeta %s.Teniu correu antic a la carpeta %s.Teniu correu antic.Heu de triar una contrasenya més llargaHeu d'esperar més temps abans de canviar la contrasenyaEl vostre compte ha caducat. Contacteu amb l'administrador del sistemanomés canvien les majúscules i minúsculesconté el nom d'usuari d'alguna formaconté una seqüència de caràcters monòtona massa llargaconté massa caràcters idèntics consecutiusconversa errònia (%d) s'ha produït un error en inicialitzar PAM s'ha produït un error en pam_set_item() és un palíndromestà giradaés la mateixa que l'antigaés massa semblant a l'antigaés massa senzillanivell:entrada:entrada: ha fallat la bifurcació: %mError d'assignació de memòriano hi ha suficients classes de caràctersrol:Linux-PAM-1.1.8/po/sr@latin.po0000644000000000000000000004366412216527620012674 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Marko Uskokovic , 2007, 2008. # Miloš Komarčević , 2008. # Nikola Pajtić , 2008. # Sandra Gucul-Milojevic , 2008. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:59+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sr@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Ističe vreme...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Izvinite, vreme vam je isteklo!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "razgovor pun grešaka (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Lozinka: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nova %s%slozinka: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Ponovo unesite novu %s%slozinku: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Izvinite, lozinke se ne podudaraju." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Ponovo unesite %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Promena lozinke je prekinuta." #: libpam/pam_item.c:311 msgid "login:" msgstr "prijava:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Uspešno" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritična greška - prekidam odmah" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Neuspešno učitavanje modula" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Simbol nije pronađen" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Greška u uslužnom modulu" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Sistemska greška" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Greška memorijskog bafera" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Dozvola je odbijena" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Neuspešna autentifikacija" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Nedovoljno uverenja za pristup podacima autentifikacije" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Usluga autentifikacije ne može da dobavi informacije autentifikacije" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Korisnik nije poznat osnovnom modulu autentifikacije" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Iskorišćen je maksimalni broj pokušaja usluge" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Žeton autentifikacije više nije ispravan; neophodan je novi" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Korisnički nalog je istekao" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Ne mogu da napravim/uklonim stavku navedene sesije" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Usluga autentifikacije ne može da dobavi korisnička uverenja" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Korisnička uverenja su istekla" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Neuspešno postavljanje korisničkih uverenja" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Nisu prisutni specifični podaci modula" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Loš objekat je prosleđen pam_*_item() funkciji" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Greška u razgovoru" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Greška pri manipulaciji žetonom autentifikacije" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Informacije o autentifikaciji ne mogu biti povraćene" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Zaključavanje žetona autentifikacije je zauzeto" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Zastarevanje žetona autentifikacije je isključeno" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Neuspešna preliminarna provera uslugom lozinke" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "PAM dispečer treba da ignoriše povratnu vrednost" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Modul je nepoznat" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Istekao je žeton autentifikacije" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Razgovor očekuje događaj" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Program mora ponovo da pozove libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Nepoznata PAM greška" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "ista je kao i stara" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "palindrom je" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "samo promene veličine slova" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "suviše je slična prethodnoj" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "suviše je jednostavna" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "izokrenuta je" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "nema dovoljno klasa znakova" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "sadrži previše istih znakova uzastopno" #: modules/pam_cracklib/pam_cracklib.c:664 #, fuzzy msgid "contains too long of a monotonic character sequence" msgstr "sadrži previše istih znakova uzastopno" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "sadrži korisničko ime u nekom obliku" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Nije ponuđena lozinka" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Lozinka nije promenjena" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "LOŠA LOZINKA: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s neuspeh: izlazni kod %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s neuspeh: uhvaćen signal %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s neuspeh: nepoznat status 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %e. %b %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " sa %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " na %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Poslednja prijava:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Dobro došli na vaš novi nalog!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Poslednja neuspešna prijava:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "Bio je %d neuspeo pokušaj prijave od poslednje uspešne prijave." msgstr[1] "Bilo je %d neuspela pokušaja prijave od poslednje uspešne prijave." msgstr[2] "Bilo je %d neuspelih pokušaja prijave od poslednje uspešne prijave." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "Bilo je %d neuspelih pokušaja prijave od poslednje uspešne prijave." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Previše prijava za „%s“." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Nemate poštu." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Imate novu poštu." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Imate staru poštu." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Imate poštu." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Nemate poštu u fascikli %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Imate novu poštu u fascikli %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Imate staru poštu u fascikli %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Imate poštu u fascikli %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Pravim direktorijum „%s“." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Ne mogu da napravim direktorijum „%s“." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Lozinka je već u upotrebi. Izaberite drugu." #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "Lozinka je već u upotrebi. Izaberite drugu." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Podrazumevani bezbednosni kontekst %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Da li želite da unesete drugu ulogu ili nivo?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "uloga:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Nema podrazumevane vrste za ulogu %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "nivo:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Neispravan bezbednosni kontekst" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Ne mogu da pribavim ispravan kontekst za %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Bezbednosni kontekst %s je dodeljen" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Kontekst pravljenja ključa %s je dodeljen" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "neuspešna inicijalizacija PAM-a\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "neuspešno izvršavanje funkcije pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "prijava: greška pri grananju: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Promena STRESS lozinke za %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Unesite novu STRESS lozinku: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Ponovo unesite novu STRESS lozinku: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Potvrda je pogrešno ukucana; lozinka nije promenjena" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Nalog je privremeno zaključan (ostalo je %ld sekundi)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Nalog je zaključan zbog %u neuspelih prijava" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Greška pri autentifikaciji" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Greška usluge" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Nepoznat korisnik" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Nepoznata greška" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: zadat je loš broj za --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: nije prepoznata opcija %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file korenski-nazivdatoteke] [--user korisničkoime] [--reset[=n]] [--" "quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: ne mogu da povratim sve korisnike na broj različit od nule\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Prijava Neuspesi Poslednji neuspeh Sa\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [- korenski-nazivdatoteke] [--file korenski-nazivdatoteke]\n" " [-u korisničkoime] [--user korisničkoime]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Pristup je odobren (poslednji pristup je bio pre %ld sekundi)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Vaš nalog je istekao; obratite se administratoru sistema" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Morate odmah da promenite vašu lozinku (nametnuo root)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Morate odmah da promenite vašu lozinku (zastarela je)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Upozorenje: vaša lozinka će isteći kroz %d dan" msgstr[1] "Upozorenje: vaša lozinka će isteći kroz %d dana" msgstr[2] "Upozorenje: vaša lozinka će isteći kroz %d dana" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Upozorenje: vaša lozinka će isteći kroz %d dana" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS lozinka ne može biti promenjena." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Morate izabrati dužu lozinku" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Menjam lozinku za %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(trenutna) UNIX lozinka: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Morate duže sačekati na promenu lozinke" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Unesite novu UNIX lozinku: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Ponovo unesite novu UNIX lozinku: " #~ msgid "Would you like to enter a security context? [N] " #~ msgstr "Da li želite da unesete bezbednosni kontekst? [N]" Linux-PAM-1.1.8/po/mai.gmo0000644000000000000000000000076412216527620012024 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Maithili (http://www.transifex.com/projects/p/fedora/language/mai/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: mai Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/ar.po0000644000000000000000000004346412216527617011526 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:57+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...الوقت ينفد...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...عذرًا، انتهى الوقت!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "محادثة خاطئة (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "كلمة السر: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "كلمة سر %s%s الجديدة: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "أعد كتابة كلمة سر %s%s الجديدة: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "عذرًا، يوجد عدم تطابق بين كلمات السر." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "تسجيل الدخول:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "نجاح" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "خطأ جسيم - إيقاف فوري" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "الرمز غير موجود" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "خطأ في الوحدة النمطية للخدمة" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "خطأ بالنظام" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "خطأ في الذاكرة الوسيطة" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "الإذن مرفوض" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "فشل التصديق" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "صلاحيات غير كافية للوصول إلى بيانات التصديق" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "تعذر على خدمة التصديق استرجاع معلومات التصديق" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "المستخدم مجهول بالنسبة لوحدة التصديق النمطية الأساسية" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "تم استنفاذ الحد الأقصى للمحاولة بالنسبة لهذه الخدمة" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "لم يعد الرمز المميز للتصديق صالحًا، مطلوب رمز مميز جديد" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "انتهت صلاحية حساب المستخدم" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "لا يمكن إنشاء/إزالة إدخال بالنسبة للجلسة المحددة" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "لا يمكن لخدمة التصديق استرجاع صلاحيات المستخدم" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "صلاحيات المستخدم منتهية الصلاحية" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "فشل تعيين صلاحيات المستخدم" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "لا يوجد بيانات خاصة بالوحدات النمطية" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "تم تمرير عنصر سيء إلى pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "خطأ في المحادثة" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "خطأ في معالجة الرمز المميز للتصديق" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "لا يمكن استعادة معلومات التصديق" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "قفل الرمز المميز للتصديق مشغول" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "تم تعطيل تقادم الرمز المميز للتصديق" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "فشل التحقق الأولي بواسطة خدمة كلمة السر" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "يجب تجاهل القيمة الناتجة بواسطة إرسال PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "الوحدة النمطية غير معروفة" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "انتهت صلاحية الرمز المميز للتصديق" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "المحادثة تنتظر الحدث" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "يحتاج التطبيق إلى استدعاء libpam مرة أخرى" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "خطأ PAM غير معروف" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "لا يوجد اختلاف عن كلمة السر القديمة" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "كلمة سر يمكن قراءتها من الجهتين" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "لم يتم سوى تغيير حالة الأحرف" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "كلمة السر الجديدة شديدة الشبه بكلمة السر القديمة" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "كلمة السر شديدة البساطة" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "كلمة مرور ملتفة" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "لم يتم إدخال كلمة السر" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "لم يتم تغيير كلمة السر" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "كلمة سر سيئة: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "%a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "من %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "في %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "تسجيل الدخول الأخير:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "مرحبًا بك في حسابك الجديد!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "مرات تسجيل دخول كثيرة جدًا لـ '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "لا يوجد بريد." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "لديك بريد جديد." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "لديك بريد قديم." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "لديك بريد." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "ليس لديك بريد في مجلد %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "لديك بريد جديد في مجلد %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "لديك بريد قديم في مجلد %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "لديك بريد في مجلد %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "كلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى." #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "كلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "لا يصلح كسياق أمان" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "تم تخصيص سياق الأمان %s" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "فشلت تهيئة PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "فشل pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "تسجيل الدخول: فشل تشعيب: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "أدخل كلمة سر STRESS الجديدة: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "أعد كتابة كلمة سر STRESS الجديدة: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "إعادة كتابة كلمة السر غير صحيحة؛ كلمة السر لم تتغير" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "خطأ في التصديق" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "خطأ في الخدمة" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "مستخدم غير معروف" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "خطأ غير معروف" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: تم إعطاء رقم خطأ لـ --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: خيار غير معروف %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: لا يمكن إعادة تعيين كافة المستخدمين إلى رقم غير الصفر\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "انتهت مدة صلاحية الحساب الخاص بك؛ الرجاء الاتصال بمسؤول النظام" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "مطلوب منك تغيير كلمة السر على الفور (مفروض بواسطة المسؤول)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "مطلوب منك تغيير كلمة السر على الفور (كلمة السر قديمة جدًا)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "تعذر تغيير كلمة السر الخاصة بـ NIS." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "يجب اختيار كلمة سر أطول" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "كلمة سر UNIX (الحالية): " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "يجب الانتظار فترة أطول لتغيير كلمة السر" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "أدخل كلمة سر UNIX الجديدة: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "أعد كتابة كلمة سر UNIX الجديدة: " Linux-PAM-1.1.8/po/id.po0000644000000000000000000003507312216527617011515 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # sentabi, 2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-22 05:07+0000\n" "Last-Translator: sentabi\n" "Language-Team: Indonesian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Sandi:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Maaf, sandi yang anda masukkan tidak sama." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Ketik ulang %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Pergantian sandi digagalkan." #: libpam/pam_item.c:311 msgid "login:" msgstr "Masuk:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Berhasil" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kesalahan kritis - Langsung ditunda" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Gagal memuat modul" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Simbol tidak ditemukan" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Kesalahan di servis modul" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Kesalahan sistem" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Kesalahan buffer memory" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Izin ditolak" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Otentikasi gagal" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Tidak cukup hak akses untuk mengakses data" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Servis otentikasi tidak mendapatkan info otentikasi" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Pengguna tidak dikenal oleh modul otentikasi" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Sudah melebihi batas percobaan servis" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Token otentikasi tidak valid, dibutuhkan otentikasi yang baru" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Akun pengguna sudah berakhir" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Tidak dapat membuat/menghapus entri untuk sesion" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Otentikasi servis tidak mendapat kredential pengguna" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Kredential pengguna telah berakhir" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Gagal dalam mengkonfigurasi izin pengguna" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Tidak ada modul yang ditampilkan" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Kesalahan item diteruskan ke pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Terjadi kesalahan percakapan " #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Kesalahan di token otentikasi " #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Informasi otentikasi tidak dapat dikembalikan" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Kunci otentikasi sedang sibuk" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Batas token otentikasi tidak aktif" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "terlalu panjang karakter berurutan" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Anda menerima surel baru." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Anda memiliki surel lama" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Anda menerima surel" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Anda tidak memiliki surel di folder %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Anda memiliki surel baru di folder %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Anda memiliki email lama di folder %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Membuat direktori '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Tidak dapat membuat direktori '%s'." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Sandi sudah digunakan sebelumnya. Pilih sandi yang lain." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Sandi sudah digunakan." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Apakah anda mau menambah izin atau level yang berbeda?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "Sebagai:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "Level:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Konteks sekuriti tidak benar." #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Tidak mendapat valid konten untuk %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Masukkan sandi Unix yang baru :" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Ketik ulang sandi Unix:" Linux-PAM-1.1.8/po/de.gmo0000644000000000000000000002741512216527620011650 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %  $,'J$rHGwG7AG,%FKY@3" B= * /  . M"!%p!!!!!!&".")N"'x""*"".#5/#Pe#*#'# $0!$R$p$+$&$"$$'%9%!Q%%s%4%>% & &&1&I&,Y&/&-& & ''':'A' W':d''L8((?(4()1)D)Y)v)F)A)W*,w* *1*9*=1+o++!++"+!,&,.B,+q,D,.,.-<@-9}--#--. ).7.T.n.}..$.#... /,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-12-12 19:06+0000 Last-Translator: Roman Spirgi Language-Team: German MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: de Plural-Forms: nplurals=2; plural=(n != 1); %A, den %d. %B %Y, %H:%M:%S %Z von %.*s auf %.*s%s schlug fehl: Signal %d%s erhalten%s schlug fehl: Fehlercode %d%s schlug fehl: Unbekannter Status 0x%x%s: Ungültige Nummer für --reset= %s: Es können nicht alle Benutzer auf Nicht-null zurückgesetzt werden %s: Nicht erkannte Option: %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (aktuelles) UNIX-Passwort: ...Ihre Zeit ist abgelaufen. ...Time läuft ab... Zugriff erlaubt (letzter Zugriff war vor %ld Sekunden).Das Konto ist wegen %u fehlgeschlagener Anmelde-Versuche gesperrtKonto temporär gesperrt (noch %ld Sekunden)Anwendung muss libpam wieder aufrufenAuthentifizierungsfehlerFehler bei AuthentifizierungAuthentifizierungsinformationen können nicht wiederhergestellt werdenAuthentifizierungsdienst kann Authentifizierungsinformationen nicht abrufenAuthentifizierungsdienst kann keine Benutzerberechtigung abrufenZeitablauf für Authentifizierungstoken deaktiviertAuthentifizierungstoken abgelaufenAuthentifizierungstoken ist nicht mehr gültig; neues erforderlichSperre für Authentifizierungstoken belegtFehler beim Ändern des AuthentifizierungstokenSchlechtes Passwort: %sUngültiges Element an pam_*_item() übergebenErstellen/Entfernen eines Eintrags für die angegebene Sitzung nicht möglichÄndern des STRESS-Passworts für %s.Ändern des Passworts für %s.KommunikationsfehlerKommunikation wartet auf EreignisErstelle Verzeichnis '%s'.Kritischer Fehler - sofortiger AbbruchStandard-Sicherheitskontext %s Geben Sie ein neues STRESS-Passwort ein: Geben Sie ein neues UNIX-Passwort ein: Fehler im Service-ModulVorabtest durch Passwortdienst gescheitertFehler beim Laden des ModulsFehler beim Festlegen der BenutzerberechtigungMaximale Anzahl an Versuchen für den Dienst erreichtBerechtigungsnachweis für Zugriff auf Authentifizierungsdaten nicht ausreichendSchlüssel-Erzeugungskontext %s zugeordnetLetzte fehlgeschlagene Anmeldung:%s%s%sLetzte Anmeldung:%s%s%sAccount Fehler Letzter Versuch Von Fehler beim ZwischenspeichernModul ist nicht bekanntÄnderung des NIS-Passworts nicht möglich.Geben Sie ein neues %s%sPasswort ein: Keinen Standard-Typ für Rolle %s Keine Nachrichten.Keine modulspezifischen Daten vorhandenKein Passwort angegebenKein gültiger SicherheitskontextPasswort Änderung wurde abgebrochen.Das gleiche Passwort wurde bereits einmal verwendet.Passwort wurde bereits verwendet. Wählen Sie ein anderes aus.Passwort nicht geändertPasswort: Berechtigung verweigertNeu eingeben %sGeben Sie das neue %s%sPasswort erneut ein: Geben Sie das neue STRESS-Passwort erneut ein: Geben Sie das neue UNIX-Passwort erneut ein: Sicherheitskontext %s zugewiesenDienstfehlerDie Passwörter stimmen nicht überein.ErfolgSymbol nicht gefundenSystemfehlerDer Rückgabewert sollte von PAM-Dispatch ignoriert werdenEs gab %d fehlgeschagenen Versuch seit der letzten erfolgreichen Anmeldung.Es gab %d fehlgeschlagene Versuche seit der letzten erfolgreichen Anmeldung.Es gab %d fehlgeschlagene Versuche seit der letzten erfolgreichen Anmeldung.Zu viele Anmeldungen für '%s'.Verzeichnis %s kann nicht erstellt und initialisiert werden: %mUnfähig einen gültigen Kontext zu erhalten für %sUnbekannter PAM-FehlerUnbekannter FehlerUnbekannter BenutzerBenutzerkonto ist abgelaufenBenutzerberechtigung abgelaufenBenutzer bei zu Grunde liegendem Authentifizierungsmodul nicht bekanntBestätigungspasswort falsch eingegeben; Passwort nicht geändertWarnung: Ihr Passwort läuft in %d Tag ab.Warnung: Ihr Passwort läuft in %d Tagen ab.Warnung: Ihr Passwort läuft in %d Tagen ab.Willkommen in Ihrem neuen Konto!Wollen Sie eine andere Rolle oder Stufe eingeben?Sie müssen Ihr Passwort sofort ändern (Passwortablauf).Sie müssen Ihr Passwort sofort ändern (von root erzwungen).Sie haben Nachrichten in %s.Sie haben Nachrichten.Sie haben neue Nachrichten in %s.Sie haben neue Nachrichten.Sie haben keine Nachrichten in %s.Sie haben alte Nachrichten in %s.Sie haben alte Nachrichten.Sie müssen ein längeres Passwort auswählen.Sie können Ihr Passwort noch nicht ändernIhr Konto ist abgelaufen. Wenden Sie sich an den Systemadministratornur Änderungen bei der Gross-/Kleinschreibungenthält den Benutzernamen in irgendeiner FormDer gesetzte Wert beinhaltet zu lange monotone Zeichenfolgendas gleiche Zeichen wurde so oft hintereinander verwendetfehlerhafte Kommunikation (%d) Fehler beim Initialisieren von PAM Fehler bei pam_set_item() ist ein Palindromewurde gedrehtist das gleiche wie das Alteist dem alten zu ähnlichist zu einfachStufe:Login:Anmeldung: Fehler bei Abspaltung: %mFehler beim Allozieren von Speichernicht genug unterschiedliche Arten von ZeichenFunktion:Linux-PAM-1.1.8/po/ko.po0000644000000000000000000004343212216527617011530 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # eukim , 2013 # eukim , 2007,2009 # eukim , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-16 13:34+0000\n" "Last-Translator: eukim \n" "Language-Team: Korean (http://www.transifex.com/projects/p/fedora/language/" "ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "..시간 초과...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...죄송합니다. 시간이 초과되었습니다!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "잘못된 인증 대화 (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "암호:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "새 %s%s 암호:" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "새 %s%s 암호 재입력:" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "죄송합니다. 암호가 일치하지 않습니다." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "다시 입력 %s " #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "암호가 변경되지 않습니다. " #: libpam/pam_item.c:311 msgid "login:" msgstr "로그인:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "성공" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "치명적인 오류 - 즉시 중지" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "모듈 가져오기 실패" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "기호를 찾을 수 없음" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "서비스 모듈에서 오류 발생" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "시스템 오류" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "메모리 버퍼 오류" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "권한 부여 거부" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "인증 실패" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "인증 데이터에 액세스하기에 인증이 불충분함" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "인증 서비스가 인증 정보를 읽을 수 없음" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "기본 인증 모듈에서 사용자를 알 수 없음" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "서비스를 최대로 재시도함" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "더이상 인증 토큰이 유효하지 않음: 새로운 인증 토큰 필요" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "사용자 계정 만료" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "특정 세션에 대해 항목을 생성/삭제할 수 없음" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "인증 서비스에서 사용자 인증을 읽을 수 없음" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "사용자 인증 만료" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "사용자 인증 설정 실패" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "특정 모듈 데이터가 없음" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item()에 잘못된 항목이 전달됨" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "인증 대화 오류" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "인증 토근 수정 오류" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "인증 정보를 복구할 수 없음" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "인증 토큰 잠금 장치 사용중" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "인증 토큰 기한이 비활성화됨" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "암호 서비스로 사전 확인 실패" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "복귀 값은 PAM 디스패치에 의해 무시됨" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "모듈을 알 수 없음" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "인증 토큰 만료" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "이벤트를 위해 인증 대화를 기다리는 중 입니다" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "libpam을 다시 불러오려면 응용 프로그램이 필요함" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "알 수 없는 PAM 오류" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "이전 암호와 같음" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "메모리 할당 오류 " #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "앞뒤 어느쪽에서 읽어도 같은 문맥임" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "대소문자만 변경" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "이전 암호와 유사함" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "너무 간단함" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "교체됨" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "문자 클래스가 부족합니다 " #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "너무 많은 동일한 문자가 연속적으로 포함되어있습니다 " #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "너무 길게 단순한 문자가 연속적으로 포함되어 있습니다 " #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "어떠한 형식으로 사용자 이름을 포함합니다. " #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "암호가 없음" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "암호가 변경되지 않음" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "잘못된 암호: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s 실패: 종료 코드 %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s 실패: 신호 발견 %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s 실패: 알 수 없는 상태 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s에서 시작" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " 일시 %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "마지막 로그인:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "새로운 계정을 사용해 주셔서 감사합니다!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "마지막 로그인 실패:%s%s%s " #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "마지막 로그인 후 %d 번의 로그인 시도가 실패하였습니다. " #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "마지막 로그인 후 %d 번의 로그인 시도가 실패하였습니다. " #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' 대해 너무 많이 로그인함." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "메일 없음." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "새로운 메일이 있습니다." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "오래된 메일이 있습니다." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "메일이 있습니다." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "%s 폴더에 메일이 없습니다." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "%s에 새로운 메일이 있습니다." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "%s 폴더에 오래된 메일이 있습니다." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "%s 폴더에 메일이 있습니다." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "'%s' 디렉토리 생성 중. " #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "'%s' 디렉토리를 생성 및 초기화할 수 없습니다. " #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "이미 사용되고 있는 암호입니다. 다른 암호를 선택해 주십시오." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "이미 사용되고 있는 암호입니다." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "기본값 보안 문맥 %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "다른 역할 또는 레벨을 입력하시겠습니까? " #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "역할: " #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "%s 역할에 대한 기본값 유형이 없음 \n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "레벨: " #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "유효한 보안 문맥이 없음" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s에 대한 유효한 문맥을 가져올 수 없음 " #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "보안 문맥 %s 할당" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "키 생성 문맥 %s 할당 " #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM 초기화 실패\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() 실패\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "로그인: 포크 작업(forking) 실패: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s에 대한 STRESS 암호 변경 " #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "새 STRESS 암호 입력:" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "새 STRESS 암호를 재입력:" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "암호 확인에서 잘못 입력됨; 암호가 변경되지 않음" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "일시적으로 계정이 잠금되었습니다 (%ld 초 남음) " #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u 로그인 실패로 인해 계정이 잠김 " #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "인증 오류" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "서비스 오류" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "알 수 없는 사용자" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "알 수 없는 오류" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: 잘못된 숫자가 --reset=에 설정됨\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: 알려지지 않은 옵션 %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: 모든 사용자를 영이 아닌 값으로 설정할 수 없음\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "로그인 실패 마지막 실패 다음에서 발생\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "액세스 허용 (%ld 초 전 마지막으로 액세스되었습니다) " #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "계정이 만료되었습니다: 시스템 관리자에게 알려 주십시오" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "암호를 즉시 변경해 주십시오 (root가 강제 설정함)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "암호를 즉시 변경해 주십시오 (오래된 암호)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "경고: %d일 내로 암호가 만료됩니다" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "경고: %d일 내로 암호가 만료됩니다" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS 암호는 변경할 수 없습니다." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "더 긴 암호를 선택해 주십시오" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s에 대한 암호 변경 중 " #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(현재) UNIX 암호:" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "암호 변경을 위해 조금더 기다려 주십시오." #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "새 UNIX 암호 입력:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "새 UNIX 암호 재입력:" Linux-PAM-1.1.8/po/Makevars0000644000000000000000000000345012160065211012230 00000000000000# 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 = -E --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 = Linux-PAM Project # 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 = http://sourceforge.net/projects/pam # 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 = Linux-PAM-1.1.8/po/bs.po0000644000000000000000000003241312216527617011520 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Bosnian (http://www.transifex.com/projects/p/fedora/language/" "bs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bs\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" msgstr[2] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" msgstr[2] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/nn.po0000644000000000000000000003221612216527620011522 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Norwegian Nynorsk \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/de.po0000644000000000000000000004367012216527617011513 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Roman Spirgi , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-12-12 19:06+0000\n" "Last-Translator: Roman Spirgi \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Time läuft ab...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Ihre Zeit ist abgelaufen.\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "fehlerhafte Kommunikation (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Passwort: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Geben Sie ein neues %s%sPasswort ein: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Geben Sie das neue %s%sPasswort erneut ein: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Die Passwörter stimmen nicht überein." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Neu eingeben %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Passwort Änderung wurde abgebrochen." #: libpam/pam_item.c:311 msgid "login:" msgstr "Login:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Erfolg" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritischer Fehler - sofortiger Abbruch" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Fehler beim Laden des Moduls" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbol nicht gefunden" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Fehler im Service-Modul" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Systemfehler" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Fehler beim Zwischenspeichern" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Berechtigung verweigert" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Fehler bei Authentifizierung" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" "Berechtigungsnachweis für Zugriff auf Authentifizierungsdaten nicht " "ausreichend" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" "Authentifizierungsdienst kann Authentifizierungsinformationen nicht abrufen" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Benutzer bei zu Grunde liegendem Authentifizierungsmodul nicht bekannt" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Maximale Anzahl an Versuchen für den Dienst erreicht" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Authentifizierungstoken ist nicht mehr gültig; neues erforderlich" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Benutzerkonto ist abgelaufen" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" "Erstellen/Entfernen eines Eintrags für die angegebene Sitzung nicht möglich" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Authentifizierungsdienst kann keine Benutzerberechtigung abrufen" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Benutzerberechtigung abgelaufen" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Fehler beim Festlegen der Benutzerberechtigung" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Keine modulspezifischen Daten vorhanden" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Ungültiges Element an pam_*_item() übergeben" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Kommunikationsfehler" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Fehler beim Ändern des Authentifizierungstoken" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Authentifizierungsinformationen können nicht wiederhergestellt werden" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Sperre für Authentifizierungstoken belegt" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Zeitablauf für Authentifizierungstoken deaktiviert" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Vorabtest durch Passwortdienst gescheitert" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Der Rückgabewert sollte von PAM-Dispatch ignoriert werden" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Modul ist nicht bekannt" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Authentifizierungstoken abgelaufen" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Kommunikation wartet auf Ereignis" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Anwendung muss libpam wieder aufrufen" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Unbekannter PAM-Fehler" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "ist das gleiche wie das Alte" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "Fehler beim Allozieren von Speicher" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "ist ein Palindrome" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "nur Änderungen bei der Gross-/Kleinschreibung" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ist dem alten zu ähnlich" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "ist zu einfach" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "wurde gedreht" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "nicht genug unterschiedliche Arten von Zeichen" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "das gleiche Zeichen wurde so oft hintereinander verwendet" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "Der gesetzte Wert beinhaltet zu lange monotone Zeichenfolgen" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "enthält den Benutzernamen in irgendeiner Form" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Kein Passwort angegeben" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Passwort nicht geändert" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "Schlechtes Passwort: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s schlug fehl: Fehlercode %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s schlug fehl: Signal %d%s erhalten" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s schlug fehl: Unbekannter Status 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %A, den %d. %B %Y, %H:%M:%S %Z" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " von %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " auf %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Letzte Anmeldung:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Willkommen in Ihrem neuen Konto!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Letzte fehlgeschlagene Anmeldung:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Es gab %d fehlgeschagenen Versuch seit der letzten erfolgreichen Anmeldung." msgstr[1] "" "Es gab %d fehlgeschlagene Versuche seit der letzten erfolgreichen Anmeldung." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Es gab %d fehlgeschlagene Versuche seit der letzten erfolgreichen Anmeldung." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Zu viele Anmeldungen für '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Keine Nachrichten." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Sie haben neue Nachrichten." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Sie haben alte Nachrichten." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Sie haben Nachrichten." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Sie haben keine Nachrichten in %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Sie haben neue Nachrichten in %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Sie haben alte Nachrichten in %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Sie haben Nachrichten in %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Erstelle Verzeichnis '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Verzeichnis %s kann nicht erstellt und initialisiert werden: %m" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Passwort wurde bereits verwendet. Wählen Sie ein anderes aus." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Das gleiche Passwort wurde bereits einmal verwendet." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Standard-Sicherheitskontext %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Wollen Sie eine andere Rolle oder Stufe eingeben?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "Funktion:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Keinen Standard-Typ für Rolle %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "Stufe:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Kein gültiger Sicherheitskontext" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Unfähig einen gültigen Kontext zu erhalten für %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Sicherheitskontext %s zugewiesen" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Schlüssel-Erzeugungskontext %s zugeordnet" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "Fehler beim Initialisieren von PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "Fehler bei pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "Anmeldung: Fehler bei Abspaltung: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Ändern des STRESS-Passworts für %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Geben Sie ein neues STRESS-Passwort ein: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Geben Sie das neue STRESS-Passwort erneut ein: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Bestätigungspasswort falsch eingegeben; Passwort nicht geändert" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Konto temporär gesperrt (noch %ld Sekunden)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Das Konto ist wegen %u fehlgeschlagener Anmelde-Versuche gesperrt" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Authentifizierungsfehler" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Dienstfehler" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Unbekannter Benutzer" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Unbekannter Fehler" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Ungültige Nummer für --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Nicht erkannte Option: %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: Es können nicht alle Benutzer auf Nicht-null zurückgesetzt werden\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Account Fehler Letzter Versuch Von\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Zugriff erlaubt (letzter Zugriff war vor %ld Sekunden)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Ihr Konto ist abgelaufen. Wenden Sie sich an den Systemadministrator" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Sie müssen Ihr Passwort sofort ändern (von root erzwungen)." #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Sie müssen Ihr Passwort sofort ändern (Passwortablauf)." #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Warnung: Ihr Passwort läuft in %d Tag ab." msgstr[1] "Warnung: Ihr Passwort läuft in %d Tagen ab." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Warnung: Ihr Passwort läuft in %d Tagen ab." #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Änderung des NIS-Passworts nicht möglich." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Sie müssen ein längeres Passwort auswählen." #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Ändern des Passworts für %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(aktuelles) UNIX-Passwort: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Sie können Ihr Passwort noch nicht ändern" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Geben Sie ein neues UNIX-Passwort ein: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Geben Sie das neue UNIX-Passwort erneut ein: " Linux-PAM-1.1.8/po/nds.po0000644000000000000000000003222112216527620011667 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Low German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nds\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/ta.po0000644000000000000000000006046412216527620011521 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Arun Prakash , 2012 # I felix , 2007 # I. Felix , 2009 # shkumar , 2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-10 14:40+0000\n" "Last-Translator: shkumar \n" "Language-Team: Tamil \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ta\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "... நேரம் போய் கொண்டிருக்கிறது...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "... உங்கள் நேரம் முடிந்தது!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "பிழையான உரையாடல் (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "கடவுச்சொல்:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "புதிய %s%spassword: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "புதிய %s%spassword மீண்டும் உள்ளிடவும்: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "கடவுச்சொல் பொருந்தவில்லை." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%sஐ மறு தட்டச்சு செய்" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "கடவுச்சொல் மாற்றம் கைவிடப்பட்டது." #: libpam/pam_item.c:311 msgid "login:" msgstr "புகுபதிவு:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "வெற்றி" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "சிக்கலான பிழை - உடனடியாக நிறுத்தப்பட்டது" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "தொகுதியை ஏற்ற முடியவில்லை" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "சிக்னல் கிடைக்கவில்லை" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "சேவை தொகுதியில் பிழை" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "கணினி பிழை" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "நினைவக இடையக பிழை" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "அனுமதி இல்லை" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "உரிமம் செயலிழக்கப்பட்டது" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "உரிம தரவினை அணுக போதிய உரிமங்கள் இல்லை" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "உரிம சேவை உரிம தகவலை எடுக்க முடியவில்லை" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "உரிம தொகுதியை எடுக்க பயனருக்கு தெரியவில்லை" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "சேவைக்கு அதிகபட்ச எண்ணிக்கையான முயற்சி கொண்டது" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "உரிம டோக்கன் தவறானது; புதிய ஒன்று தேவைப்படுகிறது" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "பயனர் கணக்கு முடிவுற்றது" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "குறிப்பிட்ட அமர்வுக்கு உள்ளீட்டை உருவாக்க/நீக்க முடியவில்லை" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "உரிம சேவை பயனர் சன்மானத்தை எடுக்க முடியவில்லை" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "பயனர் சன்மானம் முடிவுற்றது" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "செயலிழக்கப்பட்ட அமைவு பயனர் சன்மானங்கள்" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "தொகுதி குறிப்பிட்ட தகவல் இல்லை" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item() க்கு தவறான உருப்படி அனுப்பப்பட்டது" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "உரையாடல் பிழை" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "உரிம டோக்கன் கணக்கீடு பிழை" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "உரிம தகவலை எடுக்க முடியவில்லை" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "உரிம டோக்கன் பூட்டு செயலில் உள்ளது" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "உரிம டோக்கன் செயலிழக்கப்பட்டது" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "கடவுச்சொல் சேவையால் முதல் சோதனை செய்ய முடியவில்லை" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "கொடுக்கப்பட்ட மதிப்பு PAM dispatch ஆல் தவிர்க்கப்பட்ட வேண்டும்" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "தொகுதியை தெரியவில்லை" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "உரிம டோக்கற் முடிவுற்றது" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "உரையாடல் நிகழ்வுக்காக காத்திருக்கிறது" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "பயன்பாடு libpam ஐ மீண்டும் அழைக்க வேண்டும்" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "தெரியாத PAM பிழை" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "இது பழையதைப் போல உள்ளது" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "நினைவக ஒதுக்கீட்டில் பிழை" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "இது ஒரு palindrome" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "எழுத்து வகை மாற்றங்கள் மட்டும்" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "இது பழையதை ஒத்தே உள்ளது" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "இது மிகவும் எளிதாக உள்ளது" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "இது சுழலக்கூடியது" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "போதிய எழுத்து வகுப்புகள் இல்லை" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "நிறைய அதே எழுத்துக்கள் தொடர்ந்து கொண்டுள்ளது" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "நீளமான ஒரு மோனோடோனிக் எழுத்துத் தொடரைக் கொண்டுள்ளது" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "சில வடிவல் பயனர் பெயரை கொண்டுள்ளது" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "கடவுச்சொல் கொடுக்கப்படவில்லை" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "கடவுச்சொல் மாற்றப்படவில்லை" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "தவறான கடவுச்சொல்: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s செயலிழக்கப்பட்டது: வெளியேறும் குறியீடு %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s செயலிழக்கப்பட்டது: சிக்னல் %d%s பிடிக்கப்பட்டது" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s செயலிழக்கப்பட்டது: தெரியாத நிலை 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "%.*s இலிருந்து" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s இல்" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "கடைசி புகுபதிவு:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "உங்கள் புதிய கணக்கு வரவேற்கப்படுகிறீர்கள்!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "கடைசி தோல்வியடைந்த புகுபதிவு:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "கடைசி புகுபதிவிலிருந்து %d புகுபதிவு முயற்சி தோல்வியடைந்தது." msgstr[1] "கடைசி புகுபதிவிலிருந்து %d புகுபதிவு முயற்சிகள் தோல்வியடைந்தன." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "கடைசி புகுபதிவிலிருந்து %d புகுபதிவு முயற்சி தோல்வியடைந்தன." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s'க்கு பல புகுபதிவுகள் உள்ளன." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "அஞ்சல் இல்லை." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "உங்களுக்கு புதிய அஞ்சல் உள்ளது." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "உங்களுக்கு பழைய அஞ்சல் உள்ளது." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "உங்களுக்கு அஞ்சல் உள்ளது." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "உங்களுக்கு %s அடைவில் அஞ்சல் இல்லை." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "உங்களுக்கு %s அடைவில் புதிய அஞ்சல் உள்ளது." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "உங்களுக்கு %s அடைவில் பழைய அஞ்சல் உள்ளது." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "உங்களுக்கு %s அடைவில் அஞ்சல் உள்ளது." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "அடைவு '%s'ஐ உருவாக்குகிறது." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "அடைவு '%s'ஐ உருவாக்க மற்றும் துவக்க முடியவில்லை." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டது. வேறொன்றை பயன்படுத்தவும்." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டுள்ளது." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "முன்னிருப்பு பாதுகாப்பு சூழல் %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "நீங்கள் வேறு பங்கு அல்லது நிலையை உள்ளிட வேண்டுமா?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "பங்கு:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "பங்கு %sக்கு முன்னிருப்பு வகை இல்லை\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "நிலை:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "இது சரியான பாதுகாப்பு சூழல் இல்லை" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%sக்கு சரியான சூழல் பெற முடியவில்லை" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "பாதுகாப்பு சூழல் %s ஒதுக்கப்பட்டது" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "விசை உருவாக்க சூழல் %s ஒதுக்கப்பட்டுள்ளது" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAMஐ ஆரம்பிக்க முடியவில்லை\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() செயலிழக்கப்பட்டது\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: failure forking: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%sக்கு STRESS கடவுச்சொல்லை மாற்றுகிறது." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "புதிய STRESS கடவுச்சொல்லை உள்ளிடவும்: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "புதிய STRESS கடவுச்சொல்லை மீண்டும் உள்ளிடவும்: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "உறுதிப்படுத்தல் முரண்பாடு; கடவுச்சொல் மாற்றப்படவில்லை" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "கணக்கு தற்காலிகமாக பூட்டப்பட்டுள்ளது (%ld விநாடிகள் உள்ளன)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u தோல்வி புகுபதிவுகளால் கணக்கு பூட்டப்பட்டுள்ளது" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "உரிம பிழை" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "சேவை பிழை" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "தெரியாத பயனர்" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "தெரியாத பிழை" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: தவறான எண் --reset= க்கு கொடுக்கப்பட்டுள்ளது\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: அங்கீகரிக்கப்படாத விருப்பம் %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: பூஜ்ஜியமில்லாததற்கு அனைத்து பயனர்களையும் மறு அமைக்க முடியவில்லை\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "புகுபதிவு கடைசி தோல்வி தோல்வியடைந்தது இங்கிருந்து\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "அணுகல் வழங்கப்பட்டது (கடைசி அணுகல் %ld விநாடிகளுக்கு முன்)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "உங்கள் கணக்கு முடிவுற்றது, உங்கள் கணினி நிர்வாகியை அணுகவும்" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "நீங்கள் உங்கள் கடவுச்சொல்லை உடனடியாக மாற்ற வேண்டும் (ரூட் வலியுறுத்துகிறது)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "நீங்கள் உங்கள் கடவுச்சொல்லை உடனடியாக மாற்ற வேண்டும் (கடவுச்சொல் மூப்பாகிவிட்டது)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "எச்சரிக்கை: கடவுச்சொல் %d நாட்களில் முடிவுறும்" msgstr[1] "எச்சரிக்கை: கடவுச்சொல் %d நாட்களில் முடிவுறும்" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "எச்சரிக்கை: கடவுச்சொல் %d நாட்களில் முடிவுறும்" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS கடவுச்சொல்லை மாற்ற முடியாது." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "நீங்கள் நீண்ட கடவுச்சொல்லை தேர்ந்தெடுக்க வேண்டும்" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%sக்கு கடவுச்சொல்லை மாற்றுகிறது." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(நடப்பு) UNIX கடவுச்சொல்: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "உங்கள் கடவுச்சொல்லை மாற்ற சிறிது காத்திருக்க வேண்டும்" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "புதிய UNIX கடவுச்சொல்லை உள்ளிடவும்: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "புதிய UNIX கடவுச்சொல்லை மீண்டும் உள்ளிடவும்: " Linux-PAM-1.1.8/po/as.gmo0000644000000000000000000004205512216527620011660 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % :9U;N0G uUCa.q`1  P!+c!.!d!#""n#\#[$^$D%,%Q&U&^&W<''b'H(]`(N(= )<K)&))30*d**|+f,<k,/,f,A?--Q-/-S .$t.O.L.L6/Y/W/50A001/1IL1K1I1Y,22J2242:03|k3Y3B5<5j,6L6 67:"7L]7b7 8889g:Lp::P;<F<0=SK===S=S1>G>>_?@*@U@r1ATA"A.B/KB?{BB2B< CHCYChC0|C5C4CD,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-10 06:40+0000 Last-Translator: ngoswami Language-Team: Assamese (http://www.transifex.com/projects/p/fedora/language/as/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: as Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y %.*s ৰ পৰা %.*s ত%s বিফল: %d%s সঙ্কেত ধৰা গ'ল%s বিফল: প্ৰস্থানৰ কোড %d%s বিফল: অজ্ঞাত অৱস্থা 0x%x%s: --reset= লৈ বেয়া সংখ্যা দিয়া গৈছে %s: সকলো ব্যৱহাৰকৰোঁতাক শূণ্য নোহোৱা অৱস্থালৈ পুনঃ প্ৰতিষ্ঠা কৰিব নোৱাৰি %s: অপৰিচিত বিকল্প %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (বৰ্ত্তমানৰ) UNIX গুপ্তশব্দ: ...ক্ষমা কৰিব, আপোনাৰ বাবে সময় অন্ত হ'ল! ...সময় পাৰ হৈ গৈছে... অভিগম্যতাৰ অনুমতি (শেহতীয়া অভিগম্যতা %ld ছেকেণ্ড আগতে) ।%u বিফল প্ৰৱেশৰ বাবে হিচাপ লক কৰা হৈছেহিচাপ অস্থায়ীৰূপে লক কৰা হৈছে (%ld ছেকেণ্ড আৰু আছে)অনুপ্ৰয়োগে আকৌ libpam ক মাতিব লাগেপ্ৰমাণীকৰণত ভুলপ্ৰমাণীকৰণত বিফলপ্ৰমাণীকৰণৰ তথ্য উদ্ধাৰ কৰিব পৰা ন'গ'লপ্ৰমাণীকৰণৰ সেৱাই প্ৰমাণীকৰণৰ তথ্য উদ্ধাৰ কৰিব নোৱাৰিলেব্যৱহাৰকৰোঁতাৰ প্ৰশংসা পত্ৰ প্ৰমাণীকৰন সেৱাই উদ্ধাৰ কৰিব পৰা নাইপ্ৰমাণীকৰণ প্ৰতীক চিহ্নৰ পুৰণি হোৱা নিষ্ক্ৰীয় কৰা হ'লপ্ৰমাণীকৰণৰ প্ৰতীক চিহ্ন পুৰণি হ'লপ্ৰমাণীকৰণৰ প্ৰতীক চিহ্ন বৈধ নহয়; নতুন এটাৰ প্ৰয়োজনপ্ৰমাণীকৰণ প্ৰতীক চিহ্নৰ লক ব্যস্তপ্ৰমাণীকৰণ প্ৰতীক চিহ্নৰ পৰিবৰ্ত্তনত (মেনিপুলেশন) ভুলবেয়া গুপ্তশব্দ: %spam_*_item() লৈ বেয়া পদাৰ্থ আগবঢ়োৱা হ'লনিৰ্দ্দিষ্ট অধিবেশনৰ এটা নিবেশ বনাব/আঁতৰাব নোৱাৰি%s ৰ বাবে STRESS গুপ্তশব্দ সলনি কৰা হৈছে ।%s ৰ বাবে গুপ্তশব্দ সলনি কৰা হৈছে ।সম্বাদৰ ভুলসম্বাদ কোনো ঘটনাৰ বাবে অপেক্ষা কৰিছে'%s' পঞ্জিকা সৃষ্টি কৰা হৈছে ।গুৰুত্বপূৰ্ণ ভুল - অবিলম্ব বন্ধ কৰকঅবিকল্পিত সুৰক্ষাৰ সন্দৰ্ভ %s নতুন STRESS গুপ্তশব্দ দিয়ক:নতুন UNIX গুপ্তশব্দ দিয়ক: সেৱাৰ অংশত ভুলগুপ্তশব্দ সেৱাৰ দ্বাৰা প্ৰাৰম্ভিক পৰীক্ষা বিফলঅংশ তুলি লওঁতে বিফলব্যৱহাৰকৰোঁতাৰ প্ৰশংসা পত্ৰ প্ৰতিষ্ঠা কৰাত বিফলসেৱাৰ বাবে সৰ্বাধিক পুনঃ চেষ্টাৰ সংখ্যাও আজৰাই দিয়া হ'লপ্ৰমাণীকৰণৰ তথ্য উপক্ৰম কৰিবলৈ প্ৰশংসা পত্ৰৰ অভাৱচাবি নিৰ্মাণৰ সন্দৰ্ভ %s নিযুক্ত কৰা হ'লশেহতীয়া প্ৰৱেশ বিফল:%s%s%sশেহতীয়া প্ৰৱেশ:%s%s%sপ্ৰৱেশ বিফল শেহতীয়া বিফলতা -ৰ পৰা স্মৃতিশক্তি প্ৰশমকৰ ভুলঅজ্ঞাত অংশNIS গুপ্তশব্দ সলনি কৰিব পৰা নহয় ।নতুন %s%s গুপ্তশব্দ: %s ভূমিকা বাবে অবিকল্পিত ধৰণ নাই কোনো ডাক নাই ।কোনো অংশ নিৰ্দ্দিষ্ট তথ্য নাইকোনো গুপ্তশব্দ দিয়া হোৱা নাইএটা বৈধ সুৰক্ষাৰ সন্দৰ্ভ নহয়গুপ্ত শব্দ সলনি কৰা বাতিল কৰা হ'ল ।পাছৱাৰ্ড ইতিমধ্যে ব্যৱহাৰ হৈছে।গুপ্তশব্দ ইতিমধ্যে ব্যৱহৃত । অন্য এটা বাচি লওক ।গুপ্ত শব্দ অপৰিবৰ্ত্তিতগুপ্তশব্দ:আজ্ঞা নাই%s পুনঃ লিখকনতুন %s%s গুপ্তশব্দ পুনঃ লিখক: নতুন STRESS গুপ্তশব্দ পুনঃ লিখক: নতুন UNIX গুপ্তশব্দ পুনঃ লিখক: সুৰক্ষাৰ সন্দৰ্ভ %s নিযুক্ত কৰা হ'লসেৱাৰ ভুলক্ষমা কৰিব, গুপ্তশব্দৰ অমিল সফলতাপ্ৰতিকৃতি পোৱা ন'গ'লব্যৱস্থাপ্ৰণালীৰ ভুলPAM dispatch ৰ দ্বাৰা প্ৰত্যুত্তৰৰ মান আওকাণ কৰিব লাগেশেহতীয়া সফল প্ৰৱেশৰ পিছত %d বিফল হোৱা প্ৰৱেশৰ চেষ্টা চলোৱা হৈছিল ।শেহতীয়া সফল প্ৰৱেশৰ পিছত %d বিফল হোৱা প্ৰৱেশৰ চেষ্টা চলোৱা হৈছিল ।শেহতীয়া সফল প্ৰৱেশৰ পিছত %d বিফল হোৱা প্ৰৱেশৰ চেষ্টা চলোৱা হৈছিল ।'%s' ৰ বাবে বহুতো প্ৰৱেশ ।%s পঞ্জিকা সৃষ্টি আৰু আৰম্ভ কৰিব পৰা নাই ।%s ৰ বাবে বৈধ সন্দৰ্ভ পোৱা ন'গ'লঅজ্ঞাত PAM ভুলঅজ্ঞাত ভুলঅজ্ঞাত ব্যৱহাৰকৰোঁতাব্যৱহাৰকৰোঁতাৰ হিচাপ শেষ হ'লব্যৱহাৰকৰোঁতাৰ প্ৰশংসা পত্ৰ অন্ত হ'লঅন্তৰ্নিহিত প্ৰমাণীকৰণ অংশৰ বাবে ব্যৱহাৰকৰোঁতা অপৰিচিতসত্যৰ প্ৰতিপাদন ভুলকৈ লিখা গ'ল;গুপ্তশব্দ অপৰিবৰ্ত্তিতসকীয়নী: আপোনাৰ গুপ্তশব্দ %d দিনত অন্ত হ'বসকীয়নী: আপোনাৰ গুপ্তশব্দ %d দিনত অন্ত হ'বসকীয়নী: আপোনাৰ গুপ্তশব্দ %d দিনত অন্ত হ'বআপোনাৰ নতুন হিচাপলৈ স্বাগতম!বেলেগ এটা সুৰক্ষাৰ ভূমিকা বা স্তৰ নিবেশ কৰিব খোজে নেকি ?আপুনি আপোনাৰ গুপ্তশব্দ সলনি কৰাটো প্ৰয়োজনীয় হৈ পৰিছে (গুপ্তশব্দ পুৰণি হ'ল)আপুনি আপোনাৰ গুপ্তশব্দ সলনি কৰাটো প্ৰয়োজনীয় হৈ পৰিছে (ৰূটৰ দ্বাৰা বলবৎ)%s ফোল্ডাৰত আপোনাৰ ডাক আছে ।আপোনাৰ ডাক আহিছে ।%s ফোল্ডাৰত আপোনাৰ নতুন ডাক আছে ।আপোনাৰ নতুন ডাক আহিছে ।%s ফোল্ডাৰত আপোনাৰ কোনো ডাক নাই ।%s ফোলডাৰত আপোনাৰ পুৰণি ডাক আছে ।আপেনাৰ ওচৰত পুৰণি ডাক আছে ।আপুনি ইয়াতকৈ এটা দীঘল গুপ্তশব্দ নিৰ্ব্বাচন কৰিব লাগিবআপোনাৰ গুপ্তশব্দ সলনি কৰিবলৈ আপুনি আৰু কিছু পৰ অপেক্ষা কৰিব লাগিবআপোনাৰ হিচাপ অন্ত হ'ল; অনুগ্ৰহ কৰি আপোনাৰ ব্যৱাস্থাপ্ৰণালীৰ অকল কেচ সলনি কৰাকিবা ধৰনত ব্যৱহাৰকৰ্তাৰ নাম আছেঅতি দীঘল একেধৰণৰ আখৰ ক্ৰমৰ অন্তৰ্ভুক্ত কৰেএটাৰ পিছত এটা বহুতো একেই আখৰ আছেভুল সম্বাদ (%d) PAM আৰম্ভ কৰাত বিফল pam_set_item() কৰোঁতে বিফল এটা অনুলোম‌-বিলোম বাক্যপকোৱা হৈছেপুৰণিটোৰ সৈতে একেইপৰণিটোৰ সৈতে বহুত একেইবৰ সৰলস্তৰ: প্ৰৱেশ:প্ৰৱেশ: forking ত বিফল: %mমেমৰি আবন্টন ত্ৰুটিপৰ্যাপ্ত character classes নাইভূমিকা: Linux-PAM-1.1.8/po/sk.gmo0000644000000000000000000002650712216527620011676 00000000000000x( ) B M V t  ! &  G uX    1 &Q +x &   . :& 7a #  9 '3[l5 !2 Kl, 4;6p 1%9"Kn"/E Xc u # 42AtDA/["  6 *DZo-2DHD0Oo!,B#&/Jz  -4;VsyXqy&<DM\,$Ej::1&0Wf.x=?(%'N:v,0 AC      &!%+!Q!n!!-!!/!1":O"="*""0#B#^#!m#####&## $,$*C$n$$$ $$"$$#% +%!9%[%c%v%<%%Z&%.'4T';''''.'3-(<a($((,I)v),)@)E*J* h*#v**'*$** +.1+P`++/+2+(,C,a, {, , ,',, ,--!-A-O'J%[(v:+D;Xx`1\uWwb"sG.qU EZp*F&jhA6k8 )Co?/39gH=^#,i5dt ]!RcT7r2Nle4 Lf-BP aS>m_0IMn$@KVQ Y< %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mnot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 12:01+0000 Last-Translator: Tomáš Mráz Language-Team: Slovak (http://www.transifex.net/projects/p/fedora/language/sk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sk Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2 %a %d.%m.%Y %H:%M:%S %Z z %.*s na %.*s%s zlyhalo: dostal signál %d%s%s zlyhalo: výstupný kód %d%s zlyhalo: neznámy stav 0x%x%s: Zadané zlé číslo pre --reset= %s: Nedá sa resetovať všetkých používateľov nenulovo %s: Neznáma voľba %s %s: [--file meno_suboru] [--user pouzivatelske_meno] [--reset[=n]] [--quiet] %s: [-f meno_suboru] [--file meno_suboru] [-u pouzivatelske_meno] [--user pouzivatelske_meno] [-r] [--reset[=n]] [--quiet] (aktuálne) UNIX heslo: ...Prepáčte, váš čas vypršal! ...Odpočet bol spustený... Prístup povolený (ostatný prístup pred %ld sekundami).Účet uzamknutý z dôvodu %u neúspešných prihláseníÚčet dočasne uzamknutý (zostáva %ld sekúnd)Aplikácia musí znovu zavolať libpamChyba overeniaZlyhanie overeniaOverovaciu informáciu nie je možné obnoviťOverovacia služba nemôže získať informácie pre overenieOverovacia služba nemôže získať oprávnenia používateľaStarnutie overovacieho tokenu zakázanéVypršala platnosť overovacieho tokenuOverovací token už nie je platný; požadovaný je novýOverovací token je uzamknutýChyba pri manipulácii s overovacím tokenomNESPRÁVNE HESLO: %sFunkcii pam_*_item() bola poslaná zlá položkaPre zadanú reláciu nie je možné vytvoriť/odstrániť záznamZmena STRESS hesla pre %s.Zmena hesla pre %s.Chyba konverzácieKonverzácia čaká na udalosťVytváranie priečinka '%s'.Kritická chyba - okamžité zrušeniePredvolený kontext zabezpečenia %s Zadajte nové STRESS heslo: Zadajte nové UNIX heslo: Chyba v module službyZlyhanie predbežnej kontroly v službe heslaNepodarilo sa načítať modulChyba pri nastavení oprávnení používateľaVyčerpaný maximálny počet pokusov pre službuNedostatočné oprávnenia pre prístup k údajom overeniaKontext zabezpečenia pre vytváranie kľúčov %s pridelenýPosledné neúspešné prihlásenie:%s%s%sPosledné prihlásenie:%s%s%sLogin Zlyhaní Ostatné zlyhanie Z Chyba vyrovnávacej pamäteNeznámy modulNie je možné zmeniť NIS heslo.Nové %s%sheslo: Chýba predvolený typ pre rolu %s Žiadna pošta.Nie je možné nájsť dáta pre modulHeslo nezadanéNeplatný kontext zabezpečeniaZmena hesla zrušená.Heslo už bolo použité. Zvoľte si iné.Heslo nebolo zmenenéHeslo: Prístup odmietnutýOpakujte %sOpakujte nové %s%sheslo: Znovu zadajte nové STRESS heslo: Opakujte nové UNIX heslo: Kontext zabezpečenia %s pridelenýChyba službyPrepáčte, heslá sa nezhodujú.ÚspechSymbol nenájdenýChyba systémuNávratová hodnota by mala byť ignorovaná mechanizmom PAMOd posledného úspešného prihlásenia došlo k %d neúspešnému pokusu o prihlásenie.Od posledného úspešného prihlásenia došlo k %d neúspešným pokusom o prihlásenie.Od posledného úspešného prihlásenia došlo k %d neúspešným pokusom o prihlásenie.Od posledného úspešného prihlásenia došlo k %d neúspešným pokusom o prihlásenie.Príliš veľa prihlásení pre '%s'.Nedá sa vytvoriť a inicializovať priečinok '%s'.Nepodarilo sa získať platný kontext zabezpečenia pre %sNeznáme chyba PAMNeznáma chybaNeznámy používateľPlatnosť používateľského účtu vypršalaVypršala platnosť používateľského oprávneniaPoužívateľ nie je známy pre podriadený overovací modulChybné potvrdenie; heslo nezmenenéUpozornenie: vaše heslo vyprší za %d deňUpozornenie: vaše heslo vyprší za %d dniUpozornenie: vaše heslo vyprší za %d dníUpozornenie: vaše heslo vyprší za %d dníVitajte vo vašom novom účte!Želáte si zadať inú rolu alebo úroveň?Je vyžadovaná okamžitá zmena vašeho hesla (heslo vypršalo)Je vyžadovaná okamžitá zmena vašeho hesla (vynútené správcom)Máte poštu v priečinku %s.Máte poštu.Máte novú poštu v priečinku %s.Máte novú poštu.Nemáte žiadnu poštu v priečinku %s.Máte starú poštu v priečinku %s.Máte starú poštu.Musíte si zvoliť dlhšie hesloNa zmenu svojho hesla musíte počkať dlhšiePlatnosť vášho účtu vypršala; kontaktujte prosím svojho správcu systémulen zmena veľkostiobsahuje v nejakej forme používateľské menoobsahuje príliš veľa rovnakých znakov za sebouchybná konverzácia (%d) chyba pri inicializácii PAM chyba pri pam_set_item() je palindrómje otočenéje rovnaké ako predchádzajúceje príliš podobné predchádzajúcemuje príliš jednoduchéúroveň:login:login: chyba forku: %mnedostatok rôznych druhov znakovrola:Linux-PAM-1.1.8/po/en_GB.po0000644000000000000000000003227312216527617012072 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/" "fedora/language/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/si.gmo0000644000000000000000000003141212216527620011663 00000000000000`() BMVt!&G X r  &   . :+ 7f #  9  '8 ` q 5  !  9 S ,k  4 6 ; M a "s   "   /7 JUg   2)\v  6* Z7-DD"g!,9Bf  'B `nuUn[FHANCpG5L2:Y8BMnk?^ qd"e%[O1GE/ s? 6 R l=!!,8"&e"("A"""#;8#,t#Z#}#8z$$ $R$T?%R%H%0&SJ&&2&& 'O'&'((7>(Hv(L( ));*s#+\++,A1-$s-Q-4-D.Kd...l.L//Q0@0.&1)U141#1G1Z 2${22R2J .),`[(\*2HZPQ^%T4+<7D= N6V I& !M$K9: LS1"Y#W5A;3O/8EU@'-0CG_BRF]X?> %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionConversation errorConversation is waiting for eventCritical error - immediate abortEnter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataLast login:%s%s%sMemory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword has been already used. Choose another.Password unchangedPassword: Permission deniedRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchToo many logins for '%s'.Unknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelogin:login: failure forking: %mProject-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 12:01+0000 Last-Translator: Tomáš Mráz Language-Team: Sinhala (http://www.transifex.net/projects/p/fedora/language/si/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: si Plural-Forms: nplurals=2; plural=(n != 1) %a %b %e %H:%M:%S %Z %Y%.*s වෙතින්%.*s වෙනිදා%s අසමත් විය: සංඥාව අල්ලා ගන්නා ලදි%d%s%s අසමත් විය: ඉවතිවීමෙ කේතය %d%s අසමත් විය: නොදන්නා තත්වය 0x%x%s: සාවද්‍ය අංකයක් ලබා දී ඇත --reset= %s: ශුන්‍ය නොවන අගයට සියළුම පරිශීලකයින් නැවත සැකසිය නොහැක %s: %s හදුනා නොගත් විකල්පයකි %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] (දැනට ඇති) UNIX රහස්පදය: ...සමාවන්න, ොබගේ කාලය ඉක්ම විය! ...කාල සීමාව ඉක්මවා ඇත... යෙදුමට පැරණි libpam ඇමතීමට අවශ්‍යව ඇතතහවුරු කරගැනීමේ දෝෂයතහවුරු කරගැනීම අසමත් වියතහවුරු කරගැනීමේ තොරතුරු නැවත ලබාගත නොහැකතහවුරු කරගැනීමේ සේවාව මඟින් තහවුරු කරගැනීමේ තොරතුරු ලබාගත නොහැකතහවුරු කරගැනීමේ සේවාව මඟින් පරිශීලක සහතික ලබාගත නොහැකපැරණි තහවුරු කරගැනීමේ ටෝකනය අක්‍රීයව ඇතතහවුරු කරගැනීමේ ටෝකනය කල්ඉකුතවි ඇතතහවුරු කරගැනීමේ ටෝකනය තවදුරටත් වලංගු නැත; අලුත් එකක් අවශ්‍යවේතහවුරු කරගැනීමේ ටෝකන අගුලුව කර්‍යය බහුලයිතහවුරු කරගැනීමේ ටෝකනය සැකසිමේදි දෝෂයBAD PASSWORD: %sදෝෂ සහිත අයිතමයක් pam_*_item() වෙත පිරිනැමුනීදක්වා ඇති සැසිය සඳහා ඇතුළත් කිරීමක් එකක් කිරීම/ඉවත් කිරීම කළ නොහැකපරිවර්තන දෝෂයපරිවත්තනය අවස්තාවක් සඳහා නැවතී ඇතඅවදානම් දෝෂය- ක්‍ෂණික ඉවත්වීමනව STRESS රහස්පදය ඇතුළත් කරන්න:නව UNIX රහස්පදය ඇතුළත් කරන්න:සේවා අංගයේ දෝෂයකිරහස්පද සේවයේ ප්‍රාථමික පරික්‍ෂණය අසමත්වියඅංගය පූරණය අසමත් වියපරිශීලක සහතික සැකසීම අසමත් වියසේවාව සඳහා උපරිම උත්සාහ කිරිම් ඉක්මවා ඇතඅවසර දත්ත සඳහා ප්‍රවේශයට ප්‍රමාණවත් සහතිකත්වයක් නැතඅවසාන පිවිසුම:%s%s%sමතක බෆරයේ දෝෂයනොදන්නා අංගයකිNIS රහස්පදය වෙනස් කළ නොහැක.නව %s%sරහස්පදය: තැපැල් නැත.අංගවිශේෂිත දත්ත නොමැතරහස්පදය සපයා නැතනිරවද්‍ය ආරක්‍ෂක ප්‍රකරණයක් නොවේරහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න.රහස්පදය වෙනස් නොවිනිරහස්පදය: අවසර වලකා ඇතනව %s%sරහස්පදය නැවත ඇතුළත් කරන්න: නව STRESS රහස්පදය නැවත ඇතුළත් කරන්න:නව UNIX රහස්පදය නැවත ඇතුළත් කරන්න:%s ආරක්‍ෂක ප්‍රකරණය යොදවා ඇතසේවා දෝෂයසමාවෙන්න, රහස්පද ගැලපෙන්නේ නැත.සාර්ථකයිසංකේතය හමුවූයේ නැතපද්ධති දෝෂයPAM පිටත්කර හැරීම මඟින් ආපසු ලැබෙන අගය නොසලකා හැරිය යුතුය'%s' සඳහා බොහෝ පිවිසුම් ගණනක් ඇත.නොදන්නා PAM දෝෂයනොදන්නා දෝෂයක්නොදන්නා පරිශීලකයෙක්පරිශීලක ගිණුම කල්ඉකුත් වියපරිශීලක සහතික කල්ඉකුත් වී ඇතපාදකවු තහවුරු කරගැනීමේ අංගය සඳහා පරිශිලකයා නොදනිස්ථිරකර ගැනීම සඳහා වැරදි ඇතුලත් කිරීමක්; රහස්පදය වෙනස් කළ නොහැකඅවවාදයි: ඔබගේ රහස්පදය දින %d කින් කල්ඉකුත් වේඅවවාදයි: ඔබගේ රහස්පදය දින %d කින් කල්ඉකුත් වේඅවවාදයි: ඔබගේ රහස්පදය දින %d කින් කල්ඉකුත් වේඔබගේ නව ගිණුමට සාදරයෙන් පිළිගනිමු!ඔබගේ රහස්පදය හැකි ඉක්මනින් වෙනස් කළ යුතුව ඇත (රහස්පදය පැරණියි)ඔබගේ රහස්පදය හැකි ඉක්මනින් වෙනස් කළ යුතුව ඇත (root බලකර සිටී)%s බහලුම තුළ ඔබට තැපැල් ඇත.ඔබට තැපැල් ඇත.%s බහලුම තුළ ඔබට අලුත් තැපැල් ඇත.ඔබට අලුත් තැපැල් ඇත.%s බහලුම තුළ ඔබට තැපැල් නැත.%s බහලුම තුළ ඔබට පරණ තැපැල් ඇත.ඔබට පරණ තැපැල් ඇත.ඔබ විසින් දිගු රහස්පදයක් තෝරාගත යුතුම වේඔබගේ රහස්පදය වෙනස් කිරීමට බොහෝ වෙලාවක් රැදී සිටීය යුතුම වේඔබගේ ගිණුම කල්ඉකුත් වී ඇත; කරුණාකර ඔබගේ පද්ධති කළමණාකරු හමුවන්නකැපිටල් සිම්පල් වෙනස්කම් පමණිවැරදි සගත පරිවර්තනයක්(%d) PAM ඇරඹිම අසමත් විය pam_set_item() අසමත් විය එය පැලින්ඩ්‍රොමයකිභ්‍රමණය වි ඇතඑය පැරණි රහස්පදය හා සමාන වේඑය පැරණි රහස්පදය බොගොදුරට සමාන වේඑය සරළ වැඩි වේපිවිසීම:පිවිසුම: ෆොර්කින් බිදවැටීමක්: %mLinux-PAM-1.1.8/po/fi.po0000644000000000000000000004373112216527617011517 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ilkka Pirskanen , 2005 # Janne Ahlskog , 2006 # Juhani Numminen , 2013 # Jyri Palokangas , 2006 # Ville-Pekka Vainio , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-03-25 17:42+0000\n" "Last-Translator: Juhani Numminen \n" "Language-Team: Finnish (http://www.transifex.com/projects/p/fedora/language/" "fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Aika on loppumassa...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Aikasi on loppunut!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "virheellinen keskustelu (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Salasana: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Uusi %s%ssalasana: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Anna uudelleen uusi %s%ssalasana: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Salasanat eivät täsmää." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Kirjoita uudelleen %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Salasanan vaihtaminen keskeytettiin" #: libpam/pam_item.c:311 msgid "login:" msgstr "kirjautuminen:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Onnistui" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kriittinen virhe - välitön keskeytys" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Moduulin lataus epäonnistui" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbolia ei löydetty" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Virhe palvelumoduulissa" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Järjestelmävirhe" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Muistipuskurivirhe" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Ei käyttöoikeutta" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Tunnistautumisvirhe" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Riittämätön valtuustieto tunnistautumistietojen saamiseksi" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Tunnistautumispalvelu ei pääse tunnistautumistietoihin" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Käyttäjä tuntematon taustajärjestelmän tunnistautumismoduulille" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Kaikki palvelun uudelleenyritykset käytetty" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Tunnistautumislipuke ei ole enää kelvollinen, tarvitaan uusi" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Käyttäjätili on vanhentunut" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Valitun istunnon merkintää ei voida tehdä/poistaa" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Tunnistautumispalvelu ei pääse käyttäjän valtuustietoihin" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Käyttäjän valtuustiedot vanhentunut" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Käyttäjän valtuustiedon antaminen ei onnistunut" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Moduuli riippuvaista tietoa ei ole läsnä" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Väärä tieto välitettiin pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Keskusteluvirhe" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Tunnistautumislipukkeen käsittelyvirhe" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Tunnistautumistietoja ei voida palauttaa" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Tunnistautumislipukkeen lukko varattu" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Tunnistautumislipukkeen vanhentuminen otettu pois käytöstä" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Salasanapalvelun alustava tarkistus ei onnistunut" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "PAM-välittäjän tulisi hylätä paluuarvo" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Tuntematon moduuli" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Tunnistautumislipuke vanhentunut" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Keskustelussa odotetaan tapahtumaa" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Sovelluksen tarvitsee kutsua uudelleen libpam:ia" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Tuntematon PAM-virhe" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "on sama kuin vanha" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "muistinvarausvirhe" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "on palindromi" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "vain kirjainkoko muutos" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "on liian samankaltainen vanhan kanssa" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "on liian yksinkertainen" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "on kierrätetty" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "liian vähän merkkiluokkia" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "sisältää liian monta samaa merkkiä peräkkäin" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "sisältää liian pitkän yksitoikkoisen merkkijonon" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "sisältää käyttäjätunnuksen jossakin muodossa" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Et antanut salasanaa" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Salasanaa ei vaihdettu" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "HUONO SALASANA: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s epäonnistui: loppukoodi %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s epäonnistui: otettiin kiinni signaali %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s epäonnistui: tuntematon tila 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " koneelta %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " päätteellä %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Viimeinen kirjautuminen:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Tervetuloa uudella käyttäjätilillä!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Viimeinen epäonnistunut kirjautuminen:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Edellisen onnistuneen kirjautumisen jälkeen kirjautuminen on epäonnistunut %" "d kerran." msgstr[1] "" "Edellisen onnistuneen kirjautumisen jälkeen kirjautuminen on epäonnistunut %" "d kertaa." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Edellisen onnistuneen kirjautumisen jälkeen kirjautuminen on epäonnistunut %" "d kertaa." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Liian monta kirjautumista '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Ei postia." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Sinulle on uutta postia." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Sinulla on vanha posti." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Sinulle on postia." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Sinulla ei ole postia kansiossa %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Sinulla on postia kansiossa %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Sinulla on vanhaa postia kansiossa %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Sinulla on postia kansiossa %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Luodaan hakemisto ”%s”." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Hakemistoa ”%s” ei voida luoda eikä alustaa." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Salasana on jo käytetty. Valitse toinen." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Salasana on jo käytetty." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Oletustietoturvaympäristö %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Haluatko syöttää eri roolin tai tason?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rooli:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Roolilla %s ei ole oletustyyppiä\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "taso:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Ei kelvollinen tietoturvaympäristö" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Kelvollisen ympäristön hakeminen käyttäjälle %s epäonnistui" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Tietoturvaympäristö %s asetettiin" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Avaimenluontiympäristö %s asetettiin" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM:in valmistelu epäonnistui\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() kutsu epäonnistui\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "sisäänkirjautuminen: virhe haarautumisessa: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Vaihdetaan käyttäjän %s STRESS-salasana." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Anna uusi STRESS-salasana: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Anna uusi STRESS-salasana uudelleen: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Salasanat eivät ole samat; salasanaa ei vaihdettu" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Käyttäjätunnus on lukittu tilapäisesti (%ld sekuntia jäljellä)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Käyttäjätunnus on lukittu %u epäonnistuneen kirjautumisen vuoksi" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Tunnistautumisvirhe" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Palveluvirhe" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Tuntematon käyttäjä" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Tuntematon virhe" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Väärä numero annettu valinnalle --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Tunnistamaton valinta %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file juurrutettu-tiedostonimi] [--user käyttäjätunnus] [--reset[=n]] " "[--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Ei voida palauttaa kaikkia käyttäjiä ei-nolliksi\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Tunnus Epäonnistuneita Viimeisin Koneelta\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f juurrutettu-tiedostonimi] [--file juurrutettu-tiedostonimi]\n" " [-u käyttäjätunnus] [--user käyttäjätunnus]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Pääsy sallittu (edellinen kirjautuminen %ld sekuntia sitten)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Käyttäjätilisi on vanhentunut; ota yhteyttä järjestelmän ylläpitäjään" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Salasanasi täytyy vaihtaa heti (pääkäyttäjän vaatimus)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Salasanasi täytyy vaihtaa heti (salasana vanhentunut)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Varoitus: salasana vanhentuu %d päivän kuluttua." msgstr[1] "Varoitus: salasana vanhentuu %d päivän kuluttua." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Varoitus: salasana vanhentuu %d päivän kuluttua." #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS-salasanaa ei voitu vaihtaa." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Salasanan tulee olla pidempi" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Vaihdetaan käyttäjän %s salasana." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(nykyinen) UNIX salasana: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Sinun täytyy odottaa kauemmin vaihtaaksesi salasanan" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Anna uusi UNIX-salasana: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Anna uusi UNIX-salasana uudelleen: " Linux-PAM-1.1.8/po/tr.po0000644000000000000000000004350412216527620011536 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Bahadır Kandemir , 2010 # ismail yenigül , 2013 # Koray Löker , 2006 # Onuralp SEZER , 2012 # Selim Şumlu , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-01-08 21:22+0000\n" "Last-Translator: ismail yenigül \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/fedora/language/" "tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Zaman geçiyor...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Üzgünüm, süreniz doldu!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "hatalı etkileşim (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Parola: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Yeni %s%sparolası: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Yeni %s%sparolasını tekrar girin: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Üzgünüm, parolalar birbirine uymuyor." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s'i tekrar girin" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Parola değişimi iptal edildi." #: libpam/pam_item.c:311 msgid "login:" msgstr "giriş:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Başarılı" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritik hata - şimdi çıkılıyor" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Modül yüklenemedi" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Sembol bulunamadı" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Servis modülünde hata" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Sistem hatası" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Tampon bellek hatası" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "İzin verilmedi" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Yetkilendirme hatası" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Kimlik bilgisine ulaşmak için yetersiz yetki" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Yetkilendirme servisi yetki bilgisini alamadı" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Kullanıcı, yetkilendirme modülü altyapısında tanımlı değil" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Servis için geçerli deneme sayısı aşıldı" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Yetkilendirme anahtarı artık geçerli değil; yenisi gerekiyor" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Kullanıcı hesabının süresi doldu" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Belirtilen oturum için girdi yapılamıyor/silinemiyor" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Yetkilendirme servisi kullanıcı kimliğini getiremiyor" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Kullanıcı kimliğinin süresi doldu" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Kullanıcı kimlik bilgileri ayarlanamadı" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Modüle özgü veri yok" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item() fonksiyonuna yanlış öğe geçildi" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Etkileşim hatası" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Yetkilendirme anahtarı manipülasyon hatası" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Yetkilendirme bilgisi kurtarılamadı" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Yetkilendirme anahtarının kilidi meşgul" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Yetkilendirme anahtarı vadesi pasifleştirildi" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Parola servisi ön denetimi başarısız oldu" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Dönüş değeri PAM dispatch tarafından gözardı edilmeli" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Modül bilinmiyor" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Yetkilendirme anahtarının süresi doldu" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Etkileşim için olay bekleniyor" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Uygulamanın libpam kütüphanesini yeniden çağırması gerekiyor" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Bilinmeyen PAM hatası" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "eskisi ile aynı" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "bellek ayırma hatası" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "bir palindrom (iki yönden aynı şekilde okunuyor)" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "sadece büyük-küçük harf değişimi" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "eskisine çok benziyor" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "çok basit" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "değiştirilmiş" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "yetersiz karakter sınıfı" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "aynı karakterleri arka arkaya içeriyor" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "çok uzun tekdüze karakter sırası içeriyor" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "kullanıcı adını bir biçimde içeriyor" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Parola girilmedi" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Parola değiştirilmedi" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "KÖTÜ PAROLA: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s başarısız: çıkış kodu %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s başarısız: %d%s sinyali yakalandı" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s başarısız: bilinmeyen durum 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "%e %b %a %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s makinesinden" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s üzerinde" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Son giriş:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Yeni hesabınıza hoş geldiniz" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Son başarısız giriş:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Son başarılı girişten itibaren %d başarısız kimlik doğrulama girişimi oldu." msgstr[1] "" "Son başarılı girişten itibaren %d başarısız kimlik doğrulama girişimi oldu." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Son başarılı girişten itibaren %d başarısız kimlik doğrulama girişimi oldu." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "%s için çok fazla giriş." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "İleti yok." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Yeni iletiniz var." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Eski/okunmuş iletiniz var." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "İletiniz var." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "%s dizininde iletiniz yok." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "%s dizininde yeni iletiniz var." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "%s dizininde eski/okunmuş iletiniz var." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "%s dizininde iletiniz var." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "%s dizini oluşturuluyor." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "%s dizini oluşturulamadı." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Parola kullanımda. Lütfen başka bir parola seçin." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Parola önceden kullanılmıştır." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Öntanımlı Güvenlik Bağlamı %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Farklı bir rol ya da seviye girmek ister misiniz?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rol:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "%s rolü için öntanımlı tür yok\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "seviye:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Geçerli bir güvenlik bağlamı değil" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s için geçerli bir bağlam alınamadı" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Güvenlik Bağlamı %s Atandı" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Anahtar Oluşturma Bağlamı %s Atandı" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM başlatılamadı\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() çalıştırılamadı\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "giriş: çatallama yapılamadı: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s için STRESS parolası değiştiriliyor." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Yeni STRESS parolası girin: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Yeni STRESS parolasını tekrar girin: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Doğrulama hatalı; parola değiştirilmedi" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Hesap geçici bir süre kilitlendi (%ld saniye kaldı)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Hesap %u başarısız giriş yüzünden kilitlendi" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Yetkilendirme hatası" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Servis hatası" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Bilinmeyen kullanıcı" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Bilinmeyen hata" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset argümanına geçersiz sayı verildi\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Tanınmayan seçenek %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file DosyanınTamYolu] [--user KullanıcıAdı] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Tüm kullanıcılara sıfır olmayan bir değer atanamadı\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Giriş Hatalar Son hata Kim\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Erişim izni verildi (son erişim %ld saniye önceydi)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Hesabınızın süresi doldu; lütfen sistem yöneticinizle bağlantıya geçin" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Parolanızı en kısa sürede değiştirmeniz gerekiyor (yönetici baskıs)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Parolanızı en kısa sürede değiştirmeniz gerekiyor (parola eski)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Uyarı: şifreniz %d gün içerisinde süresi dolacaktır." msgstr[1] "Uyarı: şifreniz %d gün içerisinde süresi dolacaktır." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Uyarı: Parolanız %d gün içinde geçerliliğini yitirecek" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS parolası değiştirilemiyor" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Daha uzun bir parola girmelisiniz" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s kullanıcısının parolası değiştiriliyor." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(geçerli) parola: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Parolanızı değiştirmek için daha sonra denemelisiniz" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Yeni parolayı girin: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Yeni parolayı tekrar girin: " Linux-PAM-1.1.8/po/as.po0000644000000000000000000005644712216527617011534 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Amitakhya Phukan , 2008-2009 # Amitakhya Phukan , 2007 # ngoswami , 2012-2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-10 06:40+0000\n" "Last-Translator: ngoswami \n" "Language-Team: Assamese (http://www.transifex.com/projects/p/fedora/language/" "as/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: as\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...সময় পাৰ হৈ গৈছে...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...ক্ষমা কৰিব, আপোনাৰ বাবে সময় অন্ত হ'ল!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "ভুল সম্বাদ (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "গুপ্তশব্দ:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "নতুন %s%s গুপ্তশব্দ: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "নতুন %s%s গুপ্তশব্দ পুনঃ লিখক: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "ক্ষমা কৰিব, গুপ্তশব্দৰ অমিল " #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s পুনঃ লিখক" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "গুপ্ত শব্দ সলনি কৰা বাতিল কৰা হ'ল ।" #: libpam/pam_item.c:311 msgid "login:" msgstr "প্ৰৱেশ:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "সফলতা" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "গুৰুত্বপূৰ্ণ ভুল - অবিলম্ব বন্ধ কৰক" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "অংশ তুলি লওঁতে বিফল" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "প্ৰতিকৃতি পোৱা ন'গ'ল" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "সেৱাৰ অংশত ভুল" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "ব্যৱস্থাপ্ৰণালীৰ ভুল" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "স্মৃতিশক্তি প্ৰশমকৰ ভুল" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "আজ্ঞা নাই" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "প্ৰমাণীকৰণত বিফল" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "প্ৰমাণীকৰণৰ তথ্য উপক্ৰম কৰিবলৈ প্ৰশংসা পত্ৰৰ অভাৱ" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "প্ৰমাণীকৰণৰ সেৱাই প্ৰমাণীকৰণৰ তথ্য উদ্ধাৰ কৰিব নোৱাৰিলে" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "অন্তৰ্নিহিত প্ৰমাণীকৰণ অংশৰ বাবে ব্যৱহাৰকৰোঁতা অপৰিচিত" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "সেৱাৰ বাবে সৰ্বাধিক পুনঃ চেষ্টাৰ সংখ্যাও আজৰাই দিয়া হ'ল" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "প্ৰমাণীকৰণৰ প্ৰতীক চিহ্ন বৈধ নহয়; নতুন এটাৰ প্ৰয়োজন" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "ব্যৱহাৰকৰোঁতাৰ হিচাপ শেষ হ'ল" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "নিৰ্দ্দিষ্ট অধিবেশনৰ এটা নিবেশ বনাব/আঁতৰাব নোৱাৰি" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "ব্যৱহাৰকৰোঁতাৰ প্ৰশংসা পত্ৰ প্ৰমাণীকৰন সেৱাই উদ্ধাৰ কৰিব পৰা নাই" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "ব্যৱহাৰকৰোঁতাৰ প্ৰশংসা পত্ৰ অন্ত হ'ল" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "ব্যৱহাৰকৰোঁতাৰ প্ৰশংসা পত্ৰ প্ৰতিষ্ঠা কৰাত বিফল" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "কোনো অংশ নিৰ্দ্দিষ্ট তথ্য নাই" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item() লৈ বেয়া পদাৰ্থ আগবঢ়োৱা হ'ল" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "সম্বাদৰ ভুল" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "প্ৰমাণীকৰণ প্ৰতীক চিহ্নৰ পৰিবৰ্ত্তনত (মেনিপুলেশন) ভুল" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "প্ৰমাণীকৰণৰ তথ্য উদ্ধাৰ কৰিব পৰা ন'গ'ল" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "প্ৰমাণীকৰণ প্ৰতীক চিহ্নৰ লক ব্যস্ত" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "প্ৰমাণীকৰণ প্ৰতীক চিহ্নৰ পুৰণি হোৱা নিষ্ক্ৰীয় কৰা হ'ল" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "গুপ্তশব্দ সেৱাৰ দ্বাৰা প্ৰাৰম্ভিক পৰীক্ষা বিফল" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "PAM dispatch ৰ দ্বাৰা প্ৰত্যুত্তৰৰ মান আওকাণ কৰিব লাগে" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "অজ্ঞাত অংশ" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "প্ৰমাণীকৰণৰ প্ৰতীক চিহ্ন পুৰণি হ'ল" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "সম্বাদ কোনো ঘটনাৰ বাবে অপেক্ষা কৰিছে" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "অনুপ্ৰয়োগে আকৌ libpam ক মাতিব লাগে" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "অজ্ঞাত PAM ভুল" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "পুৰণিটোৰ সৈতে একেই" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "মেমৰি আবন্টন ত্ৰুটি" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "এটা অনুলোম‌-বিলোম বাক্য" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "অকল কেচ সলনি কৰা" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "পৰণিটোৰ সৈতে বহুত একেই" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "বৰ সৰল" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "পকোৱা হৈছে" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "পৰ্যাপ্ত character classes নাই" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "এটাৰ পিছত এটা বহুতো একেই আখৰ আছে" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "অতি দীঘল একেধৰণৰ আখৰ ক্ৰমৰ অন্তৰ্ভুক্ত কৰে" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "কিবা ধৰনত ব্যৱহাৰকৰ্তাৰ নাম আছে" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "কোনো গুপ্তশব্দ দিয়া হোৱা নাই" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "গুপ্ত শব্দ অপৰিবৰ্ত্তিত" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "বেয়া গুপ্তশব্দ: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s বিফল: প্ৰস্থানৰ কোড %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s বিফল: %d%s সঙ্কেত ধৰা গ'ল" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s বিফল: অজ্ঞাত অৱস্থা 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s ৰ পৰা" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s ত" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "শেহতীয়া প্ৰৱেশ:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "আপোনাৰ নতুন হিচাপলৈ স্বাগতম!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "শেহতীয়া প্ৰৱেশ বিফল:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "শেহতীয়া সফল প্ৰৱেশৰ পিছত %d বিফল হোৱা প্ৰৱেশৰ চেষ্টা চলোৱা হৈছিল ।" msgstr[1] "শেহতীয়া সফল প্ৰৱেশৰ পিছত %d বিফল হোৱা প্ৰৱেশৰ চেষ্টা চলোৱা হৈছিল ।" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "শেহতীয়া সফল প্ৰৱেশৰ পিছত %d বিফল হোৱা প্ৰৱেশৰ চেষ্টা চলোৱা হৈছিল ।" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' ৰ বাবে বহুতো প্ৰৱেশ ।" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "কোনো ডাক নাই ।" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "আপোনাৰ নতুন ডাক আহিছে ।" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "আপেনাৰ ওচৰত পুৰণি ডাক আছে ।" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "আপোনাৰ ডাক আহিছে ।" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "%s ফোল্ডাৰত আপোনাৰ কোনো ডাক নাই ।" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "%s ফোল্ডাৰত আপোনাৰ নতুন ডাক আছে ।" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "%s ফোলডাৰত আপোনাৰ পুৰণি ডাক আছে ।" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "%s ফোল্ডাৰত আপোনাৰ ডাক আছে ।" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "'%s' পঞ্জিকা সৃষ্টি কৰা হৈছে ।" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "%s পঞ্জিকা সৃষ্টি আৰু আৰম্ভ কৰিব পৰা নাই ।" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "গুপ্তশব্দ ইতিমধ্যে ব্যৱহৃত । অন্য এটা বাচি লওক ।" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "পাছৱাৰ্ড ইতিমধ্যে ব্যৱহাৰ হৈছে।" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "অবিকল্পিত সুৰক্ষাৰ সন্দৰ্ভ %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "বেলেগ এটা সুৰক্ষাৰ ভূমিকা বা স্তৰ নিবেশ কৰিব খোজে নেকি ?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ভূমিকা: " #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "%s ভূমিকা বাবে অবিকল্পিত ধৰণ নাই\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "স্তৰ: " #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "এটা বৈধ সুৰক্ষাৰ সন্দৰ্ভ নহয়" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s ৰ বাবে বৈধ সন্দৰ্ভ পোৱা ন'গ'ল" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "সুৰক্ষাৰ সন্দৰ্ভ %s নিযুক্ত কৰা হ'ল" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "চাবি নিৰ্মাণৰ সন্দৰ্ভ %s নিযুক্ত কৰা হ'ল" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM আৰম্ভ কৰাত বিফল\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() কৰোঁতে বিফল\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "প্ৰৱেশ: forking ত বিফল: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s ৰ বাবে STRESS গুপ্তশব্দ সলনি কৰা হৈছে ।" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "নতুন STRESS গুপ্তশব্দ দিয়ক:" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "নতুন STRESS গুপ্তশব্দ পুনঃ লিখক: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "সত্যৰ প্ৰতিপাদন ভুলকৈ লিখা গ'ল;গুপ্তশব্দ অপৰিবৰ্ত্তিত" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "হিচাপ অস্থায়ীৰূপে লক কৰা হৈছে (%ld ছেকেণ্ড আৰু আছে)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u বিফল প্ৰৱেশৰ বাবে হিচাপ লক কৰা হৈছে" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "প্ৰমাণীকৰণত ভুল" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "সেৱাৰ ভুল" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "অজ্ঞাত ব্যৱহাৰকৰোঁতা" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "অজ্ঞাত ভুল" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset= লৈ বেয়া সংখ্যা দিয়া গৈছে\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: অপৰিচিত বিকল্প %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: সকলো ব্যৱহাৰকৰোঁতাক শূণ্য নোহোৱা অৱস্থালৈ পুনঃ প্ৰতিষ্ঠা কৰিব নোৱাৰি\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "প্ৰৱেশ বিফল শেহতীয়া বিফলতা -ৰ পৰা\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "অভিগম্যতাৰ অনুমতি (শেহতীয়া অভিগম্যতা %ld ছেকেণ্ড আগতে) ।" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "আপোনাৰ হিচাপ অন্ত হ'ল; অনুগ্ৰহ কৰি আপোনাৰ ব্যৱাস্থাপ্ৰণালীৰ " #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "আপুনি আপোনাৰ গুপ্তশব্দ সলনি কৰাটো প্ৰয়োজনীয় হৈ পৰিছে (ৰূটৰ দ্বাৰা বলবৎ)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "আপুনি আপোনাৰ গুপ্তশব্দ সলনি কৰাটো প্ৰয়োজনীয় হৈ পৰিছে (গুপ্তশব্দ পুৰণি হ'ল)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "সকীয়নী: আপোনাৰ গুপ্তশব্দ %d দিনত অন্ত হ'ব" msgstr[1] "সকীয়নী: আপোনাৰ গুপ্তশব্দ %d দিনত অন্ত হ'ব" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "সকীয়নী: আপোনাৰ গুপ্তশব্দ %d দিনত অন্ত হ'ব" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS গুপ্তশব্দ সলনি কৰিব পৰা নহয় ।" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "আপুনি ইয়াতকৈ এটা দীঘল গুপ্তশব্দ নিৰ্ব্বাচন কৰিব লাগিব" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s ৰ বাবে গুপ্তশব্দ সলনি কৰা হৈছে ।" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(বৰ্ত্তমানৰ) UNIX গুপ্তশব্দ: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "আপোনাৰ গুপ্তশব্দ সলনি কৰিবলৈ আপুনি আৰু কিছু পৰ অপেক্ষা কৰিব লাগিব" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "নতুন UNIX গুপ্তশব্দ দিয়ক: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "নতুন UNIX গুপ্তশব্দ পুনঃ লিখক: " Linux-PAM-1.1.8/po/es.po0000644000000000000000000004452412216527617011531 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Andrei Garza , 2012 # chris.rico , 2013 # chris.rico , 2013 # Domingo Becker , 2008 # Héctor Daniel Cabrera , 2009 # Manuel Ospina , 2007 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-06-04 13:29+0000\n" "Last-Translator: Daniel Cabrera \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...El tiempo se está agotando...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Lo sentimos, el tiempo se ha agotado.\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "conversación incorrecta (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Contraseña: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nueva %s%scontraseña: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Vuelva a escribir la nueva %s%scontraseña: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Las contraseñas no coinciden." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Reingrese %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "La contraseña no ha cambiado." #: libpam/pam_item.c:311 msgid "login:" msgstr "nombre de usuario:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Éxito" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Error crítico: cancelación inmediata" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Error al cargar el módulo" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Símbolo no encontrado" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Error en el módulo de servicios" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Error del sistema" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Error de buffer de memoria" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Permiso denegado" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Fallo de autenticación" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Credenciales insuficientes para acceder a los datos de autenticación" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" "El servicio de autenticación no puede recuperar la información de " "autenticación" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Usuario desconocido para el módulo de autenticación subyacente" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Se ha agotado el número máximo de reintentos para el servicio" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "El testigo de autenticación ya no es válido; necesitará uno nuevo" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "La cuenta del usuario ha caducado" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "No es posible crear o eliminar una entrada de la sesión especificada" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "El servicio de autenticación no puede recuperar las credenciales del usuario" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Las credenciales del usuario han caducado" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Error al definir las credenciales del usuario" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "No hay datos específicos del módulo presentes" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Elemento incorrecto enviado a pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Error de conversación" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Error de manipulación del testigo de autenticación" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "No es posible recuperar la información de autenticación" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "El testigo de autenticación parece ocupado" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Antigüedad del testigo de autenticación inhabilitada" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Error de comprobación preliminar del servicio de contraseña" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "El valor devuelto debe ser omitido por el expedidor PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Módulo desconocido" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Testigo de autenticación caducado" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "La conversación está esperando el evento" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "La aplicación debe llamar a libpam de nuevo" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Error desconocido de PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "es igual que la antigua" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "error de asignación de memoria" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "es un palíndromo" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "sólo hay cambios de minúsculas y mayúsculas" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "es demasiado similar a la antigua" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "es demasiado sencilla" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "es igual pero al revés" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "no hay suficientes clases de caracteres" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "contiene demasiados carateres iguales consecutivos" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "contiene demasiados carateres iguales consecutivos" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "de alguna manera contiene el nombre del usuario" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "No se ha proporcionado ninguna contraseña" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "La contraseña no ha cambiado" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "CONTRASEÑA INCORRECTA: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s fallido: código de salida %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s fallido: señal capturada %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s fallido: estado desconocido 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "%a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "de %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "en %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Último inicio de sesión:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "¡Bienvenido a su nueva cuenta!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Último inicio de sesión fallido:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "Hubo %d intento de logueo fallido desde el último logueo exitosoo." msgstr[1] "" "Hubo %d intentos de logueo fallidos desde el último logueo exitoso. " #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "Hubo %d intentos de logueo fallidos desde el último logueo exitoso. " #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Hay demasiados inicios de sesión para \"%s\"." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "No hay correo." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Tiene correo nuevo." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Tiene correo antiguo." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Tiene correo." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "No tiene correo en la carpeta %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Tiene correo nuevo en la carpeta %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Tiene correo antiguo en la carpeta %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Tiene correo en la carpeta %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Creando directorio '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "No se pudo crear e inicializar el directorio '%s'." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "La contraseña ya se ha utilizado. Seleccione otra." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "La contraseña ya se ha utilizado. Seleccione otra." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Contexto de Seguridad Predeterminado %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "¿Desea introducir un nivel o función diferente?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "función:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "No hay tipo por defecto para la función %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "nivel:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "No es un contexto de seguridad válido" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Imposible obtener un contexto válido para %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Contexto de seguridad %s asignado" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Contexto de Creación Clave %s Asignado" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "error al iniciar PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "error en pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "inicio de sesión: error en horquilla: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Cambiando la contraseña STRESS para %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Introduzca la nueva contraseña STRESS: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Vuelva a escribir la nueva contraseña STRESS: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Error al escribir la verificación; la contraseña no ha cambiado" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "La cuenta está temporalmente bloqueada (%ld segundos restantes)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "La cuenta está bloqueada debido a %u logueo fallidos" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Error de autenticación" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Error de servicio" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Usuario desconocido" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Error desconocido" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Número incorrecto proporcionado a --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Opción no reconocida %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file nombre de archivo-raíz] [--user nombre de usuario] [--reset[=n]] " "[--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: No es posible restaurar a todos los usuarios a un número distinto de " "cero\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Fallo de Ingresos Ultimo fallo desde\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f nombre-arch-completo] [--file nombre-arch-completo]\n" " [-u nombre-de-usuario] [--user nombre-de-usuario]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Acceso permitido (el último acceso fué hace %ld segundos)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "La cuenta ha caducado, póngase en contacto con el administrador del sistema" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" "Debe cambiar la contraseña inmediatamente (aplicado por el usuario root)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Debe cambiar la contraseña inmediatamente (la contraseña ha caducado)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Advertencia: la contraseña caducará dentro de %d día" msgstr[1] "Advertencia: la contraseña caducará dentro de %d días" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Advertencia: la contraseña caducará dentro de %d días" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "No es posible cambiar la contraseña NIS." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Debe elegir una contraseña más larga" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Cambiando la contraseña de %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(actual) contraseña de UNIX: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Debe esperar más tiempo para cambiar la contraseña" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Introduzca la nueva contraseña de UNIX: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Vuelva a escribir la nueva contraseña de UNIX: " Linux-PAM-1.1.8/po/pt.gmo0000644000000000000000000002753612216527620011707 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % ,#L(pF LN$!=58s55/9GKM? #[ G 1 2 ,!):!Gd!!!!!*!("&B"'i""""7"#2=#7p#A#.#)$!C$0e$$$#$$)%*%#I%m%)%"%(%7&8&I&Q&c&#w&&&$&$& '"'@'H'a'-q''bc()(:(B+)n))))&)C)/7*Hg*,**/*L*+Hw+%++*,+,*J,,u, ,",6,F-d-.-1-1-.0.L.e. w..... .*. /**/U/,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-01-28 11:21+0000 Last-Translator: Ricardo Pinto Language-Team: Portuguese MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y a partir de %.*s em %.*s%s falhou: sinal capturado %d%s%s falhou: código de saída %d%s falhou: estado desconhecido 0x%x%s: Número errado fornecido a --reset= %s: Não foi possível reiniciar todos os utilizadores para não zero %s: Opção não reconhecida %s %s: [--file ficheiro-raiz] [--user nome-utilizador] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u nome-de-utilizador] [--user nome-de-utilizador] [-r] [--reset[=n]] [--quiet] senha UNIX (actual): ...Lamento, o seu tempo esgotou-se! ...O tempo está a esgotar-se... Acesso permitido (último acesso foi à %ld segundos atrás).Conta bloqueada devido a %u inícios de sessão falhadosConta temporariamente bloqueada (faltam %ld segundos)A aplicação necessita de invocar o libpam novamenteErro de autenticaçãoFalha de autenticaçãoA informação de autenticação não pode ser recuperadaO serviço de autenticação não pode obter informação de autenticaçãoO serviço de autenticação não consegue obter as credenciais do utilizadorO envelhecimento do 'token' de autenticação está desactivadoO 'token' de autenticação expirouO 'token' de autenticação já não é válido; é necessário um novoO 'token' de autenticação encontra-se bloqueadoErro de manipulação do 'token' de autenticaçãoMÁ SENHA: %sItem incorrecto passado para pam_*_item()Não é possível criar/remover uma entrada para a sessão especificadaA alterar a senha STRESS para %s.A alterar senha para %s.Erro de conversaçãoA conversação está a aguardar um eventoA criar directório '%s'.Erro crítico - interrupção imediataContexto de Segurança por Omissão %s Digite a nova senha STRESS: Digite a nova senha UNIX: Erro no módulo do serviçoFalha na validação preliminar pelo serviço de senhasFalhou o carregamento do moduloFalha na definição das credenciais do utilizadorEsgotou o número máximo de tentativas para o serviçoCredenciais insuficientes para aceder aos dados de autenticaçãoContexto de Segurança de Chaves %s AtribuídoÚltimo início de sessão falhado:%s%s%sÚltimo início de sessão:%s%s%sSessão Falhas Última falha De Erro de buffer de memóriaO módulo é desconhecidoA senha NIS não pode ser alterada.Nova %s%ssenha: Perfil sem tipo definido por omissão %s Não tem correio electrónico.Não existe informação do móduloNão foi fornecida uma senhaNão é um contexto de segurança válidoAlteração da senha interrompida.A senha já foi utilizada anteriormente.A senha já foi utilizada anteriormente. Escolha outra.Senha inalteradaSenha: Permissão negadaDigite novamente %sDigite novamente a nova %s%ssenha: Digite novamente a nova senha STRESS: Digite novamente a nova senha UNIX: Contexto de Segurança %s AtribuídoErro de serviçoLamento, as senhas não coincidem.SucessoSímbolo não encontradoErro de sistemaO valor de retorno deve ser ignorado pelo PAMHouve %d tentativa falhada de início de sessão desde o último início de sessão com sucesso.Houve %d tentativas falhadas de início de sessão desde o último início de sessão com sucesso.Houve %d tentativas falhadas de início de sessão desde o último início de sessão com sucesso.Demasiados inícios de sessão para '%s'.Não foi possível criar e inicializar o directório '%s'.Não foi possível obter um contexto de segurança válido para %sErro PAM desconhecidoErro desconhecidoUtilizador desconhecidoA conta de utilizador expirouAs credenciais do utilizador expiraramUtilizador desconhecido para o módulo de autenticação subjacenteA verificação não coincide; senha inalteradaAviso: a sua senha expira em %d diaAviso: a sua senha expira em %d diasAviso: a sua palavra passe expira em %d diasBem vindo à sua nova conta!Pretende inserir um perfil ou nível diferente?É obrigatório que altere de imediato a sua senha (antiguidade da password)É obrigatório que altere de imediato a sua senha (politica do sistema)Tem correio electrónico na pasta %s.Tem correio electrónico.Tem correio electrónico novo na pasta %s.Tem correio electrónico novo.Não tem correio electrónico na pasta %s.Tem correio electrónico antigo na pasta %s.Tem correio electrónico antigo.Deve escolher uma senha mais longaTem de esperar mais antes de poder alterar a sua senhaA sua conta expirou; por favor contacte o seu administrador de sistemaapenas muda a capitulaçãocontém, de alguma forma, o nome do utilizadorcontém demasiados caracteres iguais consecutivoscontém demasiados caracteres iguais consecutivosconversação errónea (%d) falha ao inicializar o PAM falha em pam_set_item() é um palíndromoé rodadaé igual à anterioré muito semelhante à anterioré demasiado simplesnível: utilizador:início de sessão: falha no 'forking': %merro de alocação de memórianão tem classes de caracteres suficientesPerfil: Linux-PAM-1.1.8/po/ga.gmo0000644000000000000000000003100612216527620011636 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % $-!6X r#<Q ^+0EIF@1Id7zUO >X 4 P 6!8T!!!!A!#"+"E"%W"}"+"+""" #5#8R##&#1#3#)1$*[$"$1$$$* %8%2R%%+%%%$%!&"2&8U&& &&&)&( '%4'!Z'|'+''''B'5(^*&q*6*-**+'+'=+'e+E+D+&,:?-z-<-N-L&.s..#..%.$.$//8/>h/U//.0/D00t000001+1'?1g1 |11-11!12,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-09-10 18:14+0000 Last-Translator: leftmostcat Language-Team: Irish (http://www.transifex.com/projects/p/fedora/language/ga/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ga Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4); %a %e %b %H:%M:%S %Z %Y ó %.*s ar %.*sTheip %s: fuarthas comhartha %d%sTheip %s: cód scortha %dTheip %s: stádas anaithnid 0x%x%s: Tugadh drochuimhir do --reset= %s: Ní féidir gach úsáideoir a athrú go neamhnialasach %s: Rogha anaithnid %s %s: [--file ainm-comhad-le-fréamh] [--user úsáideoir] [--reset[=u]] [--quiet] %s: [-f ainm-comhad-le-fréamh] [--file ainm-comhad-le-fréamh] [-u úsáideoir] [--user úsáideoir] [-r] [--reset[=u]] [--quiet] Focal faire UNIX (reatha): ...Tá brón orm, tá do chuid ama imithe! ...Tá am ag imeacht... Bronnadh rochtain (bhí an rochtain is déanaí %ld soicind ó shin).Cuireadh an cuntas faoi ghlas mar gheall ar %u logáil isteach teiptheCuireadh an cuntas faoi ghlas go sealadach (%ld soicind fágtha)Ní mór don fheidhmchlár libpam a ghlaoch arísEarráid fhíordheimhnitheTeip fíordheimhnitheNí féidir faisnéis fhíordheimhnithe a fháil ar aisNí féidir leis an tseirbhís fhíordheimhnithe faisnéis fhíordheimhnithe a fháilNí féidir leis an tseirbhís fhíordheimhnithe dintiúir úsáideora a fháilDíchumasaíodh dul in aois cheadchomharthaí fíordheimhnitheChuaigh an ceadchomhartha fíordheimhnithe as feidhmNíl an ceadchomhartha fíordheimhnithe bailí a thuilleadh; ceann nua de dhíthTá glas an cheadchomhartha fíordheimhnithe gnóthachEarráid ionramháil an cheadchomhartha fíordheimhnitheDROCHFHOCAL FAIRE: %sTugadh drochmhír do pam_*_item()Ní féidir iontráil don tseirbhís sonraithe a dhéanamh/bhaintFocal faire STRESS do %s á athrú.Focal faire %s á athrú.Earráid chomhráTá an comhrá ag fanacht le teagmhasComhadlann '%s' á cruthú.Earráid chriticiúil - tobscor láithreachComhthéacs Réamhshocraithe Slándála %s Iontráil focal faire STRESS nua: Iontráil focal faire UNIX nua: Earráid i modúl seirbhíseTheip ar réamhsheiceáil ag an tseirbhís fhocail faireTheip ar luchtú modúilTheip ar shocrú dintiúir úsáideoraLíon uasta na hatrialacha don tseirbhís íditheNíl cead agat sonraí fhíordheimhnithe a rochtainSannadh Comhthéacs Chruthú Eochracha %sLogáil isteach teipthe is déanaí:%s%s%sLogáil isteach is déanaí:%s%s%sLogáil isteach Teipeanna Teip is déanaí Ó Earráid mhaolán cuimhneTá an modúl anaithnidNíorbh fhéidir focal faire NIS a athrú.Focal faire%2$s%1$s nua: Níl aon chineál réamhshocraithe ann do ról %s Níl aon phost ann.Níl aon sonraí shainiúil don mhodúl annNíor soláthraíodh aon fhocal faireNí comhthéacs bailí slándála éTobscoireadh athrú focail faire.Úsáidtear an focal faire cheana.Úsáidtear an focal faire cheana. Roghnaigh ceann eile.Níor athraíodh an focal faireFocal faire: Diúltaíodh ceadIontráil %s arísIontráil focal faire%2$s%1$s nua arís: Iontráil focal faire STRESS nua arís: Iontráil focal faire UNIX nua arís:Sannadh Comhthéacs Slándála %sEarráid seirbhíseTá brón orm, ní ionann na focail fhaire.D'éirigh leisSiombail gan aimsiúEarráid chóraisBa chóir don seoladh PAM neamhaird a dhéanamh ar an luach fillteBhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a d'éirigh leis.Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a d'éirigh leis.Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a d'éirigh leis.Bhí %d n-iarracht logála isteach teipthe ann ón logáil isteach is déanaí a d'éirigh leis.Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a d'éirigh leis.Bhí %d iarracht logála isteach teipthe ann ón logáil isteach is déanaí a d'éirigh leis.An iomarca logálacha isteach do '%s'.Ní féidir comhadlann '%s' a chruthú agus a thúsú.Ní féidir comhthéacs bailí a fháil do %sEarráid PAM anaithnidEarráid anaithnidÚsáideoir anaithnidChuaigh an cuntas úsáideora as feidhmChuaigh dintiúir úsáideora as feidhmNíl aithne ar an úsáideoir ag an modúl fíordheimhnithe bunúsachClóscríobhadh deimhniú go mícheart; níor athraíodh focal faireRabhadh: rachaidh d'fhocal faire as feidhm i gceann %d láRabhadh: rachaidh d'fhocal faire as feidhm i gceann %d láRabhadh: rachaidh d'fhocal faire as feidhm i gceann %d láRabhadh: rachaidh d'fhocal faire as feidhm i gceann %d láRabhadh: rachaidh d'fhocal faire as feidhm i gceann %d láRabhadh: rachaidh d'fhocal faire as feidhm i gceann %d láFáilte go dtí do chuntas nua!An bhfuil fonn ort ról nó leibhéal difriúil a iontráil?Ní mór duit d'fhocal faire a athrú láithreach (chuaigh focal faire in aos)Ní mór duit d'fhocal faire a athrú láithreach (forfheidhmítear fréamh)Tá post agat i bhfillteán %s.Tá post agat.Tá post nua agat i bhfillteán %s.Tá post nua agat.Níl aon phost agat i bhfillteán %s.Tá seanphost agat i bhfillteán %s.Tá seanphost agat.Caithfidh tú focal faire níos faide a roghnúCaithfidh tú fanacht níos faide chun d'fhocal faire a athrúChuaigh do chuntas as feidhm; déan téagmháil le do riarthóir córais, le do thoilathruithe cáis amháintá an t-ainm úsáideora ann i bhfoirm éigintá seicheamh carachtar aontonach ró-fhada anntá an iomarca carachtar céanna ann go leantachcomhrá earráideach (%d) theip ar thúsú PAM theip ar pam_set_item() is palandróm étá sé rothlaithetá sé díreach cosúil leis an seancheanntá sé ró-chosúil leis an seancheanntá sé ró-shimplíleibhéal:logáil isteach:logáil isteach: theip ar dhéanamh foirc: %mearráid dála chuimhneníl go leor aicmí carachtar annról:Linux-PAM-1.1.8/po/ms.gmo0000644000000000000000000000124612216527620011671 00000000000000<\pqPj(current) UNIX password: Changing password for %s.Enter new UNIX password: Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 12:01+0000 Last-Translator: Tomáš Mráz Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ms Plural-Forms: nplurals=1; plural=0 (semasa) katalaluan UNIX:Menukar katalaluan untuk %s.Masukkan katalaluan UNIX baru:Linux-PAM-1.1.8/po/ka.po0000644000000000000000000003564612216527617011522 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # George Machitidze , 2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-01-26 15:08+0000\n" "Last-Translator: George Machitidze \n" "Language-Team: Georgian (http://www.transifex.com/projects/p/fedora/language/" "ka/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ka\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...დრო გადის...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "პაროლი:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "ახალი %s%sპაროლი: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "გაიმეორეთ ახალი %s%sპაროლი: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "ხელახლა შეიყვანეთ %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "მომხმარებელი:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "წარმატებული" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "მოდულის ჩატვირთვა ვერ მოხერხდა" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "სიმბოლო ვერ მოიძებნა" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "შეცდომა სერვისის მოდულში" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "სისტემური შეცდომა" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "მეხსიერების ბუფერის შეცდომა" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "წვდომა უარყოფილია" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "ავთენტიფიკაციის შეცდომა" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "მოდული უცნობია" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "PAM-ის უცნობი შეცდომა" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ძალიან გავს ძველს" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "ძალიან მარტივია" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "შებრუნებულია" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "რაღაც ფორმით გავს მომხმარებლის სახელს" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "პაროლი არ იქნა მითითებული" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "პაროლი არ შეცვლილა" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ცუდი პაროლი: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "თქვენ გაქვთ ახალი წერილი." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "'%s' დირექტორიის შექმნა." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "პაროლი უკვე იყო გამოყენებული." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "როლი:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "დონე:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "სერვისის შეცდომა" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "უცნობი მომხმარებელი" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "უცნობი შეცდომა" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(მიმდინარე) UNIX პაროლი: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "შეიყვანეთ ახალი UNIX პაროლი: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "გაიმეორეთ ახალი UNIX პაროლი: " Linux-PAM-1.1.8/po/ms.po0000644000000000000000000003236112216527620011527 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Sharuzzaman Ahmat Raslan , 2008. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 12:01+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ms\n" "Plural-Forms: nplurals=1; plural=0\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Menukar katalaluan untuk %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(semasa) katalaluan UNIX:" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Masukkan katalaluan UNIX baru:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/zh_CN.gmo0000644000000000000000000002501712216527620012255 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % $ @'a,Nu +2%*&P%w  '-!&H3[&+' F e r      !)!H!'[!'!0!!$! "19"k" """" "!" ##:#P#*f## # ## ###! $/$ K$X$t${$ $&$=$=$;%&O%v%%%%%%'%$"&+G&+s&&3&-&,'"G'j'%z''"'%''(*+(9V(((!(!( )")7) N)X)n)) ) ) )))) *,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-12-24 06:31+0000 Last-Translator: Christopher Meng Language-Team: Chinese (China) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zh_CN Plural-Forms: nplurals=1; plural=0; %a %b %e %H:%M:%S %Z %Y从 %.*s%.*s 上%s 失败:捕获的信号 %d%s%s 失败:退出代码 %d%s 失败:未知的状态 0x%x%s: 给定的数字无效 --重设置= %s: 无法将所有用户重设置为非零 %s: 未识别的选项 %s %s: [--文件 根文件名] [--用户 用户名] [--重设置[=n]] [--安静] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (当前)UNIX 密码:...对不起,您的时间已经耗尽! ...时间即将耗尽... 可以访问(上次访问是 %ld 秒之前)。因为 %u 失败登录而锁定帐户帐户暂时锁住(还有 %ld 秒)应用程序需要再次调用 libpam鉴定错误鉴定故障无法恢复鉴定信息鉴定服务无法检索到鉴定信息鉴定服务无法检索到用户身份凭证已禁用鉴定令牌过期处理鉴定令牌失效鉴定令牌不再有效;需要新的鉴定令牌鉴定令牌锁忙碌鉴定令牌操作错误无效的密码: %s传递至 pam_*_item() 的项目无效无法为指定的会话创建/去除项。为 %s 更改 STRESS 密码。为 %s 更改 STRESS 密码。转换错误转换正在等待事件创建目录 '%s'。严重错误 - 立即中止默认安全性环境 %s 输入新的 STRESS 密码:输入新的 UNIX 密码:服务模块存在错误密码服务初步检查失败装载模块失败设置用户身份凭证时出现故障已经超出服务重试的最多次数没有足够的身份凭证以访问鉴定数据已分配密钥生成环境 %s最后一次失败的登录:%s%s%s上一次登录:%s%s%sLogin Failures Latest failure From 内存缓冲区错误模块未知无法更改 NIS 密码。新的 %s%s密码:没有角色 %s 默认类型 无邮件。不存在特定于模块的数据密码未提供不是有效的安全性环境密码更改取消。密码已被使用。密码已使用。请选择其他密码。密码未更改密码:拒绝权限重新输入 %s重新输入新的 %s%s密码:重新输入新的 STRESS 密码:重新输入新的 UNIX 密码:已指派安全性环境 %s服务错误抱歉,密码不匹配。成功找不到符号系统错误返回值应该被 PAM dispatch 忽略最有一次成功登录后有 %d 次失败的登录尝试。最有一次成功登录后有 %d 次失败的登录尝试。'%s'登录过多。无法创建和初始化目录 '%s'。无法为 %s 获得有效环境未知的 PAM 错误未知的错误未知的用户用户帐户已失效用户身份凭证失效底层的鉴定模块无法识别用户校验类型错误;密码未更改警告:您的密码将在 %d 天后过期警告:您的密码将在 %d 天后过期欢迎使用新帐户!您是否愿意进入不同的角色或者级别?您需要立即更改密码(密码过期)您需要立即更改密码(root 强制)您在文件夹 %s 中有邮件。您有邮件。您在文件夹 %s 中有新邮件。您有新邮件。您在文件夹 %s 中无邮件。您在文件夹 %s 中有旧邮件。您有旧邮件。必须选择更长的密码您必须等待更长时间以更改密码您的帐户已失效;请与系统管理员取得联系仅更改了大小写以某些形式包含用户名包含过长的单一字符序列包含过多连续相同的字符有错误的转换 (%d) 未能初始化 PAM 未能 pam_set_item() 是回文是旧密码的循环与旧密码相同与旧密码过于相似过于简单级别:登录:登录:故障派生:%m内存分配错误没有足够的字符分类角色:Linux-PAM-1.1.8/po/da.gmo0000644000000000000000000002633112216527620011640 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %  0/O4!Go:+(/T!,>6<*s?%*" M /e : "  !!!!C!!X!z!!!"!6!2"5L"9"C"$#%#C#.W###$##!# $%$?$!Y$ {$$6$$ %% .%<%"\% %%%$%%% &.&J&B&!'.5''d'' ' '''5'B&(Zi(-((*)A:)A|))))** 6*W*&m*9*6*"+-(+/V+%+++++ ,(,C, ^,l,t,|, ,,,,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-01-15 16:52+0000 Last-Translator: Kris Thomsen Language-Team: Danish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: da Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y fra %.*s på %.*s%s fejlede: fangede signal %d%s%s fejlede: afslutningskode %d%s fejlede: ukendt status 0x%x%s: Der er angivet et forkert tal til --reset= %s: Alle brugere kunne ikke nulstilles til ikke-nul %s: Ikke genkendt indstilling %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rodfilnavn] [--file rodfilnavn] [-u brugernavn] [--user brugernavn] [-r] [--reset[=n]] [--quiet] (nuværende) UNIX-adgangskode: ...Din tid er desværre gået! ...Tiden er ved at udløbe... Adgang tildelt (sidste adgang var for %ld sekunder siden).Konto låst på grund af %u fejlende logindKonto midlertidigt låst (%ld sekunder tilbage)Programmet skal kalde libpam igenFejl ved godkendelseFejl ved godkendelseGodkendelsesoplysningerne kan ikke gendannesGodkendelsestjenesten kan ikke hente godkendelsesoplysningerneGodkendelsestjenesten kan ikke hente brugeroplysningerUdløb af godkendelsestoken er deaktiveretGodkendelsestoken er udløbetGodkendelses-token er ikke længere gyldig; en ny er påkrævetLås til godkendelsestoken er optagetFejl ved manipulering af godkendelsestokenDÅRLIG ADGANGSKODE: %sUgyldigt objekt blev overført til pam_*_item()Angivelsen til den angivne session kan ikke dannes/fjernesÆndrer STRESS-adgangskode for %s.Ændrer adgangskode for %s.KonversationsfejlKonversation venter på hændelseOpretter mappe "%s".Kritisk fejl - afbryder omgåendeStandard sikkerhedskontekst %s Indtast ny STRESS-adgangskode: Indtast ny UNIX-adgangskode: Der opstod en fejl i tjenestemodulIndledende kontrol af adgangskodetjenesten mislykkedesKunne ikke indlæse modulDer opstod en fejl ved angivelse af brugeroplysningerAntal forsøg på at få adgang til tjenesten er udløbetUtilstrækkelige oplysninger for at få adgang til godkendelsesdataNøgleoprettelseskontekst %s tildeltSidste fejlende logind:%s%s%sSidste login:%s%s%sLogind Fejlende Sidste fejl Fra Fejl i hukommelsesbufferModul er ukendtNIS-adgangskoden kunne ikke ændres.Ny %s%sadgangskode: Ingen standard type for rolle %s Ingen e-post.Der findes ingen modulspecifikke dataIngen adgangskode angivetIkke en gyldig sikkerhedskontekstÆndring af adgangskode afbrudt.Adgangskode er allerede i brug.Adgangskoden er allerede blevet brugt. Vælg en anden.Adgangskoden er uændretAdgangskode: Rettigheder nægtetGenindtast %sGenindtast ny %s%sadgangskode: Genindtast ny STRESS-adgangskode: Genindtast ny UNIX-adgangskode: Sikkerhedskontekst %s tildeltFejl ved tjenesteAdgangskoderne stemmer ikke overens.UdførtSymbol ikke fundetSystemfejlReturværdien bør ignoreres af PAM-afsendelseDer var %d fejlende logindforsøg siden sidste succesfulde logind.Der var %d fejlende logindforsøg siden sidste succesfulde logind.Der var %d fejlende logindforsøg siden sidste succesfulde logind.Der er for mange logind til "%s".Kunne ikke oprette og initialisere mappe "%s".Kunne ikke hente gyldig kontekst for %sUkendt PAM-fejlUkendt fejlUkendt brugerBrugerkontoen er udløbetBrugeroplysningerne er udløbetUkendt bruger for det underliggende godkendelsesmodulBekræftelsen blev angivet forkert; adgangskode forbliver uændretAdvarsel: Din adgangskode udløber om %d dagAdvarsel: Din adgangskode udløber om %d dageAdvarsel: din adgangskode udløber om %d dageVelkommen til din nye konto!Vil du angive en anden rolle eller niveau?Du skal omgående ændre din adgangskode (for gammel adgangskode)Du skal omgående ændre din adgangskode (gennemtvunget af roden)Du har e-post i mappe %s.Du har e-post.Du har ny e-post i mappe %s.Du har ny e-post.Du har ingen e-post i mappe %s.Du har gammel e-post i mappe %s.Du har gammel e-post.Du skal vælge en længere adgangskodeDu skal vente lidt længere for at ændre din adgangskodeDin konto er udløbet; kontakt din systemadministratorkun forskel i store/små bogstaverindeholder brugernavnet i en eller anden formindeholder en for lang sekvens af monotone tegnindeholder for mange af de samme tegnkonversationsfejl (%d) kunne ikke initialisere PAM pam_set_item() mislykkedes det staves ens forfra og bagfraer rotereter den samme som den gamleligner for meget den gamleer for simpelniveau:logind:logind: fejl ved forgrening: %mfejl under hukommelsesallokeringikke nok tegnklasserrolle:Linux-PAM-1.1.8/po/nds.gmo0000644000000000000000000000074112216527620012035 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Low German MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nds Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/bal.gmo0000644000000000000000000000073412216527620012011 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Balochi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bal Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/nn.gmo0000644000000000000000000000073612216527620011670 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Norwegian Nynorsk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nn Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/ka.gmo0000644000000000000000000000711712216527620011650 00000000000000#4/L #>Uf5 HS eo    # <G esz7D |C#:E@DTM (n ( E O 2V  1 4 D EI . ! 8 1 3K ( 7 C g$ $ / + % A"!#      (current) UNIX password: ...Time is running out... Authentication failureBAD PASSWORD: %sCreating directory '%s'.Enter new UNIX password: Error in service moduleFailed to load moduleMemory buffer errorModule is unknownNew %s%spassword: No password suppliedPassword has been already used.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new UNIX password: Service errorSuccessSymbol not foundSystem errorUnknown PAM errorUnknown errorUnknown userYou have new mail.contains the user name in some formis rotatedis too similar to the old oneis too simplelevel:login:role:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-01-26 15:08+0000 Last-Translator: George Machitidze Language-Team: Georgian (http://www.transifex.com/projects/p/fedora/language/ka/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ka Plural-Forms: nplurals=1; plural=0; (მიმდინარე) UNIX პაროლი: ...დრო გადის... ავთენტიფიკაციის შეცდომაცუდი პაროლი: %s'%s' დირექტორიის შექმნა.შეიყვანეთ ახალი UNIX პაროლი: შეცდომა სერვისის მოდულშიმოდულის ჩატვირთვა ვერ მოხერხდამეხსიერების ბუფერის შეცდომამოდული უცნობიაახალი %s%sპაროლი: პაროლი არ იქნა მითითებულიპაროლი უკვე იყო გამოყენებული.პაროლი არ შეცვლილაპაროლი:წვდომა უარყოფილიახელახლა შეიყვანეთ %sგაიმეორეთ ახალი %s%sპაროლი: გაიმეორეთ ახალი UNIX პაროლი: სერვისის შეცდომაწარმატებულისიმბოლო ვერ მოიძებნასისტემური შეცდომაPAM-ის უცნობი შეცდომაუცნობი შეცდომაუცნობი მომხმარებელითქვენ გაქვთ ახალი წერილი.რაღაც ფორმით გავს მომხმარებლის სახელსშებრუნებულიაძალიან გავს ძველსძალიან მარტივიადონე:მომხმარებელი:როლი:Linux-PAM-1.1.8/po/uk.po0000644000000000000000000005237612216527620011537 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ivan Petrouchtchak , 2006 # Yuri Chornoivan , 2010,2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-12-12 17:39+0000\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Час закінчується...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Вибачте, ваш час закінчився!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "помилкова розмова (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Пароль: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Новий пароль %s%s:" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Повторіть новий пароль %s%s: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Вибачте, паролі не збігаються." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Повторне введення %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Зміну пароля перервано." #: libpam/pam_item.c:311 msgid "login:" msgstr "користувач:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Успіх" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Критична помилка - негайна зупинка" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Не вдалося завантажити модуль" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Символ не знайдено" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Помилка в модулі служби" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Системна помилка" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Помилка буфера пам'яті" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Доступ заборонено" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Помилка розпізнавання" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Недостатньо прав для доступу до даних розпізнавання" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Службі розпізнавання не вдалося отримати інформацію щодо розпізнавання" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Невідомий користувач для модуля розпізнавання" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Використано максимальну кількість дозволених спроб для служби" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Лексема розпізнавання вже не чинна; потрібна нова" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Обліковий запис користувача вже застарів" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Не вдається створити / вилучити запис для вказаного сеансу" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Служба розпізнавання не може отримати права користувача" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Права користувача застаріли" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Помилка встановлення прав користувача" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Немає даних для певних модулів" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Неправильний елемент передано до pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Помилка обміну даними" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Помилка маніпуляції лексемою розпізнавання" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Не вдається відновити інформацію розпізнавання" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Лексему розпізнавання заблоковано, зайнято" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Застарівання лексеми розпізнавання вимкнено" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Невдача попередньої перевірки службою паролів" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Повернуте значення має бути проігноровано засобом розподілу PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Невідомий модуль" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Застаріла лексема розпізнавання" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Обмін даними очікує на подію" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Програмі потрібно знов викликати libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Невідома помилка PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "такий самий, як і старий" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "помилка під час спроби отримання області у пам’яті" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "— це паліндром" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "тільки зміни в регістрі" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "занадто подібний до старого" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "занадто простий" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "чергується" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "недостатнє використання класів символів" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "містить забагато послідовних однакових символів" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "містить надто довгу монотонну послідовність символів" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "містить ім’я користувача з форми" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Пароль не встановлено" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Пароль не змінено" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ПОГАНИЙ ПАРОЛЬ: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "Помилка %s: коди виходу %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "Помилка %s: отримано сигнал %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "Помилка %s: невідомий стан 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " з %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " на %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Останній вхід: %s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Ласкаво просимо до вашого нового запису!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Останній невдалий вхід: %s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Після останнього успішного входу було виконано %d спробу входу, яка " "завершилася помилкою." msgstr[1] "" "Після останнього успішного входу було виконано %d спроби входу, які " "завершилися помилками." msgstr[2] "" "Після останнього успішного входу було виконано %d спроб входу, які " "завершилися помилками." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Після останнього успішного входу було виконано %d спроби входу, які " "завершилися помилками." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Забагато входів в для «%s»." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Немає пошти." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Надійшла нова пошта." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Ви маєте стару пошту." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Надійшла пошта." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "У теці %s немає поштових повідомлень." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "У теці %s є нові поштові повідомлення." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "У теці %s є старі поштові повідомлення." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "У теці %s є поштові повідомлення." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Створення каталогу «%s»." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Не вдалося створити і ініціалізувати каталог «%s»." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Цей пароль вже використано. Виберіть інший." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Пароль вже використовувався." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Типовий контекст безпеки %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Бажаєте ввести іншу роль або рівень?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "роль:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Для ролі %s не визначено типового типу\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "рівень:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Непридатний контекст безпеки" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Не вдалося отримати коректний контекст для %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Призначено контекст безпеки %s" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Призначено контекст створення ключів %s" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "не вдалося ініціалізувати PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "помилка pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "вхід: помилка розгалуження: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Зміна пароля STRESS для %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Введіть новий пароль STRESS: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Повторіть новий пароль STRESS: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Перевірку не пройдено; пароль не змінено" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Обліковий запис тимчасово заблоковано (ще на %ld секунд)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Обліковий запис заблоковано через %u помилок під час спроби входу" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Помилка розпізнавання" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Помилка служби" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Невідомий користувач" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Невідома помилка" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: вказано помилкове число --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: нерозпізнано параметр %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file назва-файла-користувача-root] [--user ім'я користувача] [--reset" "[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: не вдається відновити ненульове значення для всіх користувачів\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Користувач Помилок Остання помилка З\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f назва-файла-користувача-root] [--file назва-файла-користувача-root]\n" " [-u користувач] [--user користувач]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Надано доступ (остання спроба доступу сталася %ld секунд тому)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "Ваш обліковий запис застарів, будь ласка, зверніться до вашого системного " "адміністратора" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Вам необхідно негайно змінити пароль (вимога адміністратора)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Вам необхідно негайно змінити пароль (поточний пароль застарів)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Попередження: ваш пароль застаріє за %d день" msgstr[1] "Попередження: ваш пароль застаріє за %d дні" msgstr[2] "Попередження: ваш пароль застаріє за %d днів" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Попередження: ваш пароль застаріє за %d днів" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Не вдалося змінити пароль NIS." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Вам слід вибрати довший пароль" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Зміна пароля %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(поточний) пароль UNIX: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Ви повинні зачекати, щоб змінити ваш пароль" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Введіть новий пароль UNIX: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Повторіть новий пароль UNIX: " Linux-PAM-1.1.8/po/it.gmo0000644000000000000000000002711012216527620011664 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %(":%]G Bu/:,.8[37]0Q7 B8 '{ ,  & A !M!l!!$!!'!% "!/"Q"q"3""-"7#@H#)###1#$/$'B$j$($$&$$&$%%>%.d%% %%%#%&%$ &"E&h&|&&&&>& 'd' ,(4M(.(((((): )9[)S)))*(0*KY*O**+$%+ J+)W+&++!+)+7,$;,'`,7,,,,-$'-L-!]-!- -----.%.A.,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-09 03:03+0000 Last-Translator: fvalen Language-Team: Italian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: it Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H.%M.%S %Z %Y da %.*s su %.*s%s fallita: intercettato il segnale %d%s%s fallita: codice d'uscita %d%s fallita: stato sconosciuto 0x%x%s: Numero errato fornito a --reset= %s: Impossibile ripristinare tutti gli utenti a valori diversi da zero %s: Opzione non riconosciuta %s %s: [--file NOMEFILE] [--user NOMEUTENTE] [--reset[=N]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] Password UNIX (corrente): ...Tempo scaduto! ...Il tempo sta per scadere... Accesso permesso (ultimo accesso risale a %ld secondi fa).Account bloccato a causa di %u login fallitiAccount momentaneamente bloccato (%ld secondi rimanenti)L'applicazione richiede una nuova chiamata a libpamErrore di autenticazioneAutenticazione fallitaImpossibile ripristinare informazioni di autenticazioneIl servizio di autenticazione non è in grado di recuperare le informazioni di autenticazioneIl servizio di autenticazione non è in grado di recuperare le credenziali utenteInvecchiamento del token di autenticazione disabilitatoToken di autenticazione scadutoToken di autenticazione non più valido; ne è richiesto uno nuovoBlocco token di autenticazione occupatoErrore manipolazione token di autenticazionePASSWORD ERRATA: %sElemento errato passato a pam_*_item()Impossibile creare/rimuovere una voce per la sessione specificataCambio password STRESS per %s.Cambio password per %s.Errore di conversazioneConversazione in attesa di un eventoCreazione della directory "%s".Errore critico - interruzione immediataContesto di sicurezza predefinito %s Immettere nuova password STRESS: Immettere nuova password UNIX: Errore nel modulo di servizioControllo preliminare del servizio password fallitoCaricamento del modulo fallitoImpostazione delle credenziali utente fallitaSuperato il numero massimo di tentativi per il servizioCredenziali insufficienti per accedere ai dati di autenticazioneContesto di creazione chiave %s assegnatoUltimo accesso fallito:%s%s%sUltimo accesso:%s%s%sLogin Ultimi Fallimenti Da Errore buffer memoriaModulo sconosciutoImpossibile modificare la password NIS.Nuova password%s%s: Nessun tipo predefinito per il ruolo %s Nessuna email.Dati specifici del modulo non presentiNessuna password fornitaNon è un contesto di sicurezza validoCambio della password abortito.La password è stata già utilizzata.Password già utilizzata. Sceglierne un'altra.Password non modificataPassword: Permesso negatoReimmettere %sReimmettere la nuova password%s%s: Reimmettere la nuova password STRESS: Reimmettere la nuova password UNIX: Contesto di sicurezza %s assegnatoErrore del servizioLe password non corrispondono.SuccessoSimbolo non trovatoErrore di sistemaIl valore restituito dovrebbe essere ignorato dal dispatch PAMSi è verificato un tentativo di login %d fallito dall'ultimo tentativo di login con successo.Si è verificato un tentativo di login %d fallito dall'ultimo tentativo di login con successo.Si sono verificati alcuni tentativi di login %d falliti dall'ultimo tentativo di login con successo.Ci sono troppi accessi per "%s".Impossibile creare e inizializzare la directory '%s'Impossibile ottenere un contesto valido per %sErrore PAM sconosciutoErrore sconosciutoUtente sconosciutoAccount utente scadutoCredenziali utente scaduteUtente sconosciuto al modulo di autenticazione sottostanteErrore di digitazione per verifica; password non cambiataAvviso: la password scadrà tra %d giornoAvviso: la password scadrà tra %d giorniAvviso: la password scadrà tra %d giorniBenvenuti nel nuovo account!Immettere un ruolo o livello differente?È richiesta la modifica immediata della password (password troppo vecchia)È richiesta la modifica immediata della password (imposto dall'amministratore)La cartella %s contiene email.Email esistenti.La cartella %s contiene nuove email.Nuove email.La cartella %s non contiene alcuna email.La cartella %s contiene vecchie email.Email vecchie.Scegliere una password più lungaAttendere ancora per cambiare la passwordAccount scaduto; contattare l'amministratore di sistemacambiano solo le maiuscole/minuscolecontiene il nome utente in alcune formecontiene una sequenza troppo lunga di caratteri simili contiene troppi caratteri simili consecutiviconversazione errata (%d) impossibile inizializzare PAM Impossibile eseguire pam_set_item() è un palindromoè una rotazione della precedenteè la stessa di quella precedenteè troppo simile alla precedenteè troppo semplicelivello:login:login: forking fallito: %merrore allocazione memorianon ha abbastanza classi di caratteriruolo:Linux-PAM-1.1.8/po/zh_HK.gmo0000644000000000000000000000074112216527621012255 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Chinese (Hong Kong) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zh_HK Plural-Forms: nplurals=1; plural=0; Linux-PAM-1.1.8/po/si.po0000644000000000000000000005130412216527620011521 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Danishka Navin , 2007. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 12:01+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: Sinhala (http://www.transifex.net/projects/p/fedora/language/" "si/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: si\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...කාල සීමාව ඉක්මවා ඇත...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...සමාවන්න, ොබගේ කාලය ඉක්ම විය!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "වැරදි සගත පරිවර්තනයක්(%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "රහස්පදය: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "නව %s%sරහස්පදය: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "නව %s%sරහස්පදය නැවත ඇතුළත් කරන්න: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "සමාවෙන්න, රහස්පද ගැලපෙන්නේ නැත." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "පිවිසීම:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "සාර්ථකයි" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "අවදානම් දෝෂය- ක්‍ෂණික ඉවත්වීම" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "අංගය පූරණය අසමත් විය" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "සංකේතය හමුවූයේ නැත" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "සේවා අංගයේ දෝෂයකි" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "පද්ධති දෝෂය" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "මතක බෆරයේ දෝෂය" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "අවසර වලකා ඇත" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "තහවුරු කරගැනීම අසමත් විය" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "අවසර දත්ත සඳහා ප්‍රවේශයට ප්‍රමාණවත් සහතිකත්වයක් නැත" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "තහවුරු කරගැනීමේ සේවාව මඟින් තහවුරු කරගැනීමේ තොරතුරු ලබාගත නොහැක" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "පාදකවු තහවුරු කරගැනීමේ අංගය සඳහා පරිශිලකයා නොදනි" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "සේවාව සඳහා උපරිම උත්සාහ කිරිම් ඉක්මවා ඇත" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "තහවුරු කරගැනීමේ ටෝකනය තවදුරටත් වලංගු නැත; අලුත් එකක් අවශ්‍යවේ" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "පරිශීලක ගිණුම කල්ඉකුත් විය" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "දක්වා ඇති සැසිය සඳහා ඇතුළත් කිරීමක් එකක් කිරීම/ඉවත් කිරීම කළ නොහැක" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "තහවුරු කරගැනීමේ සේවාව මඟින් පරිශීලක සහතික ලබාගත නොහැක" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "පරිශීලක සහතික කල්ඉකුත් වී ඇත" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "පරිශීලක සහතික සැකසීම අසමත් විය" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "අංගවිශේෂිත දත්ත නොමැත" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "දෝෂ සහිත අයිතමයක් pam_*_item() වෙත පිරිනැමුනී" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "පරිවර්තන දෝෂය" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "තහවුරු කරගැනීමේ ටෝකනය සැකසිමේදි දෝෂය" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "තහවුරු කරගැනීමේ තොරතුරු නැවත ලබාගත නොහැක" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "තහවුරු කරගැනීමේ ටෝකන අගුලුව කර්‍යය බහුලයි" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "පැරණි තහවුරු කරගැනීමේ ටෝකනය අක්‍රීයව ඇත" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "රහස්පද සේවයේ ප්‍රාථමික පරික්‍ෂණය අසමත්විය" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "PAM පිටත්කර හැරීම මඟින් ආපසු ලැබෙන අගය නොසලකා හැරිය යුතුය" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "නොදන්නා අංගයකි" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "තහවුරු කරගැනීමේ ටෝකනය කල්ඉකුතවි ඇත" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "පරිවත්තනය අවස්තාවක් සඳහා නැවතී ඇත" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "යෙදුමට පැරණි libpam ඇමතීමට අවශ්‍යව ඇත" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "නොදන්නා PAM දෝෂය" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "එය පැරණි රහස්පදය හා සමාන වේ" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "එය පැලින්ඩ්‍රොමයකි" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "කැපිටල් සිම්පල් වෙනස්කම් පමණි" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "එය පැරණි රහස්පදය බොගොදුරට සමාන වේ" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "එය සරළ වැඩි වේ" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "භ්‍රමණය වි ඇත" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "රහස්පදය සපයා නැත" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "රහස්පදය වෙනස් නොවිනි" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "BAD PASSWORD: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s අසමත් විය: ඉවතිවීමෙ කේතය %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s අසමත් විය: සංඥාව අල්ලා ගන්නා ලදි%d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s අසමත් විය: නොදන්නා තත්වය 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "%.*s වෙතින්" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "%.*s වෙනිදා" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "අවසාන පිවිසුම:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "ඔබගේ නව ගිණුමට සාදරයෙන් පිළිගනිමු!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' සඳහා බොහෝ පිවිසුම් ගණනක් ඇත." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "තැපැල් නැත." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "ඔබට අලුත් තැපැල් ඇත." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "ඔබට පරණ තැපැල් ඇත." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "ඔබට තැපැල් ඇත." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "%s බහලුම තුළ ඔබට තැපැල් නැත." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "%s බහලුම තුළ ඔබට අලුත් තැපැල් ඇත." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "%s බහලුම තුළ ඔබට පරණ තැපැල් ඇත." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "%s බහලුම තුළ ඔබට තැපැල් ඇත." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "රහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න." #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "රහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "නිරවද්‍ය ආරක්‍ෂක ප්‍රකරණයක් නොවේ" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "%s ආරක්‍ෂක ප්‍රකරණය යොදවා ඇත" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM ඇරඹිම අසමත් විය\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() අසමත් විය\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "පිවිසුම: ෆොර්කින් බිදවැටීමක්: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "නව STRESS රහස්පදය ඇතුළත් කරන්න:" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "නව STRESS රහස්පදය නැවත ඇතුළත් කරන්න:" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "ස්ථිරකර ගැනීම සඳහා වැරදි ඇතුලත් කිරීමක්; රහස්පදය වෙනස් කළ නොහැක" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "තහවුරු කරගැනීමේ දෝෂය" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "සේවා දෝෂය" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "නොදන්නා පරිශීලකයෙක්" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "නොදන්නා දෝෂයක්" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: සාවද්‍ය අංකයක් ලබා දී ඇත --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: %s හදුනා නොගත් විකල්පයකි\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: ශුන්‍ය නොවන අගයට සියළුම පරිශීලකයින් නැවත සැකසිය නොහැක\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "ඔබගේ ගිණුම කල්ඉකුත් වී ඇත; කරුණාකර ඔබගේ පද්ධති කළමණාකරු හමුවන්න" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "ඔබගේ රහස්පදය හැකි ඉක්මනින් වෙනස් කළ යුතුව ඇත (root බලකර සිටී)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "ඔබගේ රහස්පදය හැකි ඉක්මනින් වෙනස් කළ යුතුව ඇත (රහස්පදය පැරණියි)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "අවවාදයි: ඔබගේ රහස්පදය දින %d කින් කල්ඉකුත් වේ" msgstr[1] "අවවාදයි: ඔබගේ රහස්පදය දින %d කින් කල්ඉකුත් වේ" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "අවවාදයි: ඔබගේ රහස්පදය දින %d කින් කල්ඉකුත් වේ" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS රහස්පදය වෙනස් කළ නොහැක." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "ඔබ විසින් දිගු රහස්පදයක් තෝරාගත යුතුම වේ" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(දැනට ඇති) UNIX රහස්පදය: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "ඔබගේ රහස්පදය වෙනස් කිරීමට බොහෝ වෙලාවක් රැදී සිටීය යුතුම වේ" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "නව UNIX රහස්පදය ඇතුළත් කරන්න:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "නව UNIX රහස්පදය නැවත ඇතුළත් කරන්න:" Linux-PAM-1.1.8/po/en@boldquot.header0000644000000000000000000000247112160065211014164 00000000000000# 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. # Linux-PAM-1.1.8/po/sv.po0000644000000000000000000004310512216527620011536 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Christer Andersson , 2007 # Daniel Nylander , 2009-2010 # Göran Uddeborg , 2012-2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-29 08:28+0000\n" "Last-Translator: Göran Uddeborg \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/fedora/language/" "sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Tiden håller på att ta slut...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Tyvärr, din tid är ute!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "felaktig konversation (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Lösenord: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nytt %s%slösenord: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Ange nytt %s%slösenord igen: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Tyvärr, lösenorden stämmer inte överens." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Ange %s igen" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Ändring av lösenordet avbröts." #: libpam/pam_item.c:311 msgid "login:" msgstr "inloggning:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Lyckades" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritiskt fel - avbryter omedelbart" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Misslyckades med att läsa in modulen" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbolen hittades inte" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Fel i tjänstemodul" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Systemfel" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Minnesbuffertfel" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Åtkomst nekad" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Autentiseringsfel" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Otillräckliga inloggingsuppgifter för åtkomst av autentiseringsdata" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Autentiseringstjänsten kan inte hämta autentiseringsinformation" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Användaren är inte känd för underliggande autentiseringsmodul" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Maximalt antal försök har gjorts för denna tjänst" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Autentiseringselement är inte längre giltigt. Ett nytt behövs" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Användarkontot har gått ut" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Kan inte skapa/ta bort en post för angiven session" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Autentiseringstjänst kan inte hämta användarreferenser" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Användarreferenser har gått ut" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Misslyckades med att ange användarreferenser" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Ingen modulspecifik data finns" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Ogiltigt objekt skickat till pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Konversationsfel" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Manipuleringsfel för autentiseringselement" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Autentiseringsinformation kan inte återställas" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Autentiseringselementlås upptaget" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Åldrande av autentiseringselement inaktiverat" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Lösenordstjänstens preliminära kontroll misslyckades" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Returvärdet borde ignoreras vid PAM-avsändande" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Modulen är okänd" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Autentiseringselement har gått ut" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Konversation väntar på händelse" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Programmet behöver anropa libpam igen" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Okänt PAM-fel" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "är samma som det gamla" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "minnesallokeringsfel" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "är ett palindrom" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "endast ändringar i gemener och versaler" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "är för likt det gamla" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "är för enkelt" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "är roterat" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "för få teckenklasser" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "innehåller för många tecken av samma sort i följd" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "innehåller en för lång monoton teckensekvens" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "innehåller användarnamnet i någon form" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Inget lösenord angivet" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Oförändrat lösenord" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "DÅLIGT LÖSENORD: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s misslyckades: slutstatus %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s misslyckades: fångade signalen %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s misslyckades: okänd status 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %e %b %Y %H.%M.%S %Z" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " från %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " på %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Senaste inloggning:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Välkommen till ditt nya konto!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Senaste misslyckade inloggning:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Det har skett %d misslyckade inloggningsförsök sedan senaste korrekta " "inloggning." msgstr[1] "" "Det har skett %d misslyckade inloggningsförsök sedan senaste korrekta " "inloggning." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Det har skett %d misslyckade inloggningsförsök sedan senaste korrekta " "inloggning." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "För många inloggningar för \"%s\"." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Inga brev." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Du har nya brev." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Du har gamla brev." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Du har brev." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Du har inga brev i katalogen %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Du har nya brev i katalogen %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Du har gamla brev i katalogen %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Du har brev i katalogen %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Skapar katalogen \"%s\"." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Kunde inte skapa och initiera katalogen \"%s\"." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Lösenordet har redan används. Välj ett annat." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Lösenordet har redan använts." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Standardsäkerhetskontext %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Vill du ange en annan roll eller nivå?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "roll:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Ingen standardttyp för %s-roll\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "nivå:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Inte en giltig säkerhetskontext" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Kan inte hämta giltig kontext för %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Säkerhetskontext %s tilldelad" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Nyckelskapandekontext %s tilldelad" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "misslyckades med att initiera PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() misslyckades\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "inloggning: fel vid grening: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Ändrar STRESS-lösenord för %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Ange nytt STRESS-lösenord: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Ange nytt STRESS-lösenord igen: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Felskriven verifikation, lösenord oförändrat" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Kontot är temporärt låst (%ld sekunder kvar)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Kontot är låst på grund av %u misslyckade inloggningar" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Autentiseringsfel" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Tjänstefel" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Okänd användare" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Okänt fel" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Felaktigt nummer till --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Okänd flagga %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file absolut-filnamn] [--user användarnamn] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Kan inte ställa om alla användare till nollskilt värde\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Inloggning Misslyck Senaste fel Från\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filnamn] [--file rooted-filnamn]\n" " [-u användarnamn] [--user användarnamn]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Åtkomst godkänd (senaste åtkomst var %ld sekunder sedan)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Ditt konto har gått ut. Kontakta din systemadministratör" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Du måste ändra ditt lösenord omedelbart (påtvingat av root)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Du måste ändra ditt lösenord omedelbart (lösenord för gammalt)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Varning: ditt lösenord går ut om %d dag" msgstr[1] "Varning: ditt lösenord går ut om %d dagar" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Varning: ditt lösenord går ut om %d dagar" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS-lösenord kunde inte ändras." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Du måste välja ett längre lösenord" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Ändrar lösenord för %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(nuvarande) UNIX-lösenord: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Du måste vänta längre innan du kan ändra lösenord" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Ange nytt UNIX-lösenord: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Ange nytt UNIX-lösenord igen: " Linux-PAM-1.1.8/po/gu.gmo0000644000000000000000000004153712216527620011674 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % 8L>JH:Gu?4SA> z h1!(!7!}!y"#v#N$b$N$ZJ%&%D%&:&?&%+'`Q'K'<'?;(?{(=(5(t/)A)|)Rc*}*E4+Lz+,++#,/,D,%&-]L-!-V-I#.Bm.J.Y.yU/5/0+0*I09t0>0@0D.1s1T11)1262b2&4<45a5 561;6Qm6T6s7p77|8]m9v9B:;Q;1;[<;u<^<^=>o=`=>>,{?l?i@g@@@A(A8jA,A#A(A>B!\B ~BBCB,B9CKC,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-15 12:16+0000 Last-Translator: sweta Language-Team: Gujarati MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: gu Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y %.*s તરફથી %.*s પર%s નિષ્ફળ: મળેલ સંકેત %d%s%s નિષ્ફળ: બહાર નીકળ્યાનો કોડ %d%s નિષ્ફળ: અજ્ઞાત પરિસ્થિતિ 0x%x%s: --reset= ને ખોટો નંબર અપાયેલ છે %s: બધા વપરાશકર્તાઓને બિન-શૂન્યમાં પુનઃસુયોજિત કરી શકતા નથી %s: નહિં ઓળખાતો વિકલ્પ %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (વર્તમાન) UNIX પાસવર્ડ: ...માફ કરજો, તમારો સમય સમાપ્ત થયો! ...સમય ચાલ્યો જઈ રહ્યો છે... પ્રવેશની મંજૂરી આપેલ છે (છેલ્લો પ્રવેશ એ %ld સેકંડો પહેલા હતો).%u પ્રવેશો ને નિષ્ફળ કરે છે તે દરમ્યાન ખાતાને તાળુ મારેલ છેખાતુ થોડા વખત માટે તાળુ મારેલ છે (%ld સેકંડો ડાબે)કાર્યક્રમને libpam ફરીથી બોલાવવાની જરૂર છેસત્તાધિકરણ ભૂલસત્તાધિકરણ નિષ્ફળતાસત્તાધિકરણ જાણકારી પુનઃપ્રાપ્ત કરી શકાશે નહિંસત્તાધિકરણ સેવા સત્તાધિકરણ જાણકારી મેળવી શકે નહિંસત્તાધિકરણ સેવા વપરાશકર્તા પરવાનગીઓ પ્રાપ્ત કરી શકતી નથીસત્તાધિકરણ ટોકન વયમર્યાદા નિષ્ક્રિય કરાયેલસત્તાધિકરણ ટોકન નિવૃત્ત થયુંસત્તાધિકરણ ટોકન લાંબા સમય સુધી માન્ય નથી; એક નવું જરૂરી છેસત્તાધિકરણ ટોકન તાળું વ્યસ્તસત્તાધિકરણ ટોકન મેનીપ્યુલેશન ભૂલખરાબ પાસવર્ડ: %spam_*_item() ને ખરાબ વસ્તુ પસાર થઈસ્પષ્ટ થયેલ સત્ર માટે પ્રવેશ બનાવી શકતા નથી/દૂર કરી શકતા નથીSTRESS પાસવર્ડ %s માટે બદલો.%s માટે પાસવર્ડ બદલવાનું.વાર્તાલાપ ભૂલવાર્તાલાપ ઘટના માટે રાહ જોઈ રહ્યો છેડિરેક્ટરી '%s' બનાવી રહ્યા છીએ.જટિલ ભૂલ - તુરંત બંધ કરોમૂળભૂત સુરક્ષા સંદર્ભ %s નવો STRESS પાસવર્ડ દાખલ કરો: નવો UNIX પાસવર્ડ દાખલ કરો: સેવા મોડ્યુલમાં ભૂલપાસવર્ડ સેવા મારફતે પ્રાથમિક ચકાસણી નિષ્ફળમોડ્યુલ લાવવામાં નિષ્ફળવપરાશકર્તા પરવાનગીઓ સુયોજિત કરવામાં નિષ્ફળતાસેવા માટે મહત્તમ પ્રયાસો કર્યાસત્તાધિકરણ માહિતી વાપરવા માટે અપૂરતી પરવાનગીઓકી બનાવટ સંદર્ભ %s સોંપાયેલછેલ્લો નિષ્ફળ થયેલ પ્રવેશ:%s%s%sછેલ્લો પ્રવેશ:%s%s%sપ્રવેશ એ તે માંથી તાજેતરની નિષ્ફળતાને નિષ્ફળ કરે છે મેમરી બફર ભૂલમોડ્યુલ અજ્ઞાત છેNIS પાસવર્ડ બદલી શક્યા નહિં.નવો %s%sપાસવર્ડ: ભૂમિકા %s માટે કોઈ મૂળભૂત પ્રકાર નથી કોઈ મેઈલ નથી.કોઈ મોડ્યુલ લગતી માહિતી હાજર નથીકોઈ પાસવર્ડ પૂરો પડાયેલ નથીમાન્ય સુરક્ષા સંદર્ભ નથીપાસવર્ડ બદલાવનો અંત આવેલ છે.પાસવર્ડને વાપરી દેવામાં આવ્યો છે.પાસવર્ડ પહેલાથી જ વપરાઈ ગયેલ છે. બીજો પસંદ કરો.પાસવર્ડ બદલાયેલ નથીપાસવર્ડ: પરવાનગી નામંજૂર%s ને પુન:ટાઇપ કરોનવો %s%sપાસવર્ડ ફરી લખો: નવો STRESS પાસવર્ડ પુનઃલખો: નવો UNIX પાસવર્ડ ફરીથી લખો: સુરક્ષા સંદર્ભ %s સોંપાયેલસેવા ભૂલમાફ કરજો, પાસવર્ડો બંધબેસતા નથી.સફળતાસંજ્ઞા મળી નહિંસિસ્ટમ ભૂલપાછી મળતી કિંમત PAM ડિસ્પેચ દ્વારા અવગણવામાં આવવી જોઈએછેલ્લે સફળ પ્રવેશ સુધી પ્રવેશનો પ્રયત્ન કરવામાં %d નિષ્ફળ થયેલ હતુ.છેલ્લે સફળ પ્રવેશ સુધી પ્રવેશનો પ્રયત્નો કરવામાં %d નિષ્ફળ થયેલ હતુ.છેલ્લે સફળ પ્રવેશ સુધી પ્રવેશનાં પ્રયત્નો કરવામાં %d નિષ્ફળ થયેલ હતુ.'%s' માટે ઘણા બધા પ્રવેશો.ડિરેક્ટરી '%s' ને શરૂ કરવામાં અને બનાવવામાં અસમર્થ.%s માટે માન્ય સંદર્ભ મેળવવામાં અસમર્થઅજ્ઞાત PAM ભૂલઅજ્ઞાત ભૂલઅજ્ઞાત વપરાશકર્તાવપરાશકર્તા ખાતું નિવૃત્ત થયુંવપરાશકર્તા પરવાનગીઓ નિવૃત્ત થઈસત્તાધિકરણ મોડ્યુલથી વપરાશકર્તા અજ્ઞાત છેચકાસણી ખોટી-રીતે લખાઈ; પાસવર્ડ બદલાયેલ નથીચેતવણી: તમારો પાસવર્ડ %d દિવસમાં નિવૃત્ત થઈ જશેચેતવણી: તમારો પાસવર્ડ %d દિવસોમાં નિવૃત્ત થઈ જશેચેતવણી: તમારો પાસવર્ડ %d દિવસોમાં નિવૃત્ત થઈ જશેતમારા નવા ખાતામાં તમારું સ્વાગત છે!શું તમે અલગ ભૂમિકા કે સ્તર દાખલ કરવા ઈચ્છો છો?તમારે તમારો પાસવર્ડ તુરંત જ બદલવાની જરૂર છે (પાસવર્ડ વયમર્યાદિત કરાયેલ)તમારે તમારો પાસવર્ડ તુરંત જ બદલવાની જરૂર છે (root દબાણ કરેલ)તમારી પાસે ફોલ્ડર %s માં મેઈલ છે.તમારી પાસે મેઈલ છે.તમારી પાસે ફોલ્ડર %s માં નવો મેઈલ છે.તમારી પાસે નવો મેઈલ છે.તમારી પાસે ફોલ્ડર %s માં કોઈ મેઈલ નથી.તમારી પાસે ફોલ્ડર %s માં જૂનો મેઈલ છે.તમારી પાસે જૂનો મેઈલ છે.તમારે લાંબો પાસવર્ડ જ પસંદ કરવો જોઈએતમારો પાસવર્ડ બદલવા માટે તમારે લાંબો સમય રાહ જોવી જ પડશેતમારું ખાતું નિવૃત્ત થઈ ગયું છે; મહેરબાની કરીને તમારા સિસ્ટમ સંચાલકનો સંપર્ક કરોકેસ ફેરફાર માત્રઅમુક ફોર્મમાં વપરાશકર્તા નામ ને સમાવે છેમૉનોટોનિક અક્ષર ક્રમ ઘણો લાંબો સમાવે છેએકપછી એક ઘણા બધા સરખા અક્ષરોને સમાવે છેક્ષતિયુક્ત વાર્તાલાપ (%d) PAM નો આરંભ કરવામાં નિષ્ફળ pam_set_item() કરવામાં નિષ્ફળ એ પેલીન્ડ્રોમ છેએ ફેરવાયેલ છેએ જૂના જેવો જ છેએ જૂના સાથે એકદમ સરખો છેએ ખૂબ સાદો છેસ્તર:પ્રવેશ:પ્રવેશ: ફોર્કમાં નિષ્ફળ: %mમેમરી ફાળવણી ભૂલપૂરતા અક્ષર વર્ગો નથીભૂમિકા:Linux-PAM-1.1.8/po/sr.po0000644000000000000000000005213212216527620011532 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Marko Uskokovic , 2007, 2008. # Miloš Komarčević , 2008. # Nikola Pajtić , 2008. # Sandra Gucul-Milojevic , 2008. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 12:00+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Истиче време...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Извините, време вам је истекло!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "разговор пун грешака (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Лозинка: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Нова %s%sлозинка: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Поново унесите нову %s%sлозинку: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Извините, лозинке се не подударају." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Поново унесите %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Промена лозинке је прекинута." #: libpam/pam_item.c:311 msgid "login:" msgstr "пријава:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Успешно" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Критична грешка - прекидам одмах" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Неуспешно учитавање модула" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Симбол није пронађен" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Грешка у услужном модулу" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Системска грешка" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Грешка меморијског бафера" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Дозвола је одбијена" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Неуспешна аутентификација" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Недовољно уверења за приступ подацима аутентификације" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Услуга аутентификације не може да добави информације аутентификације" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Корисник није познат основном модулу аутентификације" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Искоришћен је максимални број покушаја услуге" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Жетон аутентификације више није исправан; неопходан је нови" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Кориснички налог је истекао" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Не могу да направим/уклоним ставку наведене сесије" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Услуга аутентификације не може да добави корисничка уверења" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Корисничка уверења су истекла" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Неуспешно постављање корисничких уверења" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Нису присутни специфични подаци модула" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Лош објекат је прослеђен pam_*_item() функцији" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Грешка у разговору" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Грешка при манипулацији жетоном аутентификације" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Информације о аутентификацији не могу бити повраћене" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Закључавање жетона аутентификације је заузето" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Застаревање жетона аутентификације је искључено" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Неуспешна прелиминарна провера услугом лозинке" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "PAM диспечер треба да игнорише повратну вредност" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Модул је непознат" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Истекао је жетон аутентификације" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Разговор очекује догађај" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Програм мора поново да позове libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Непозната PAM грешка" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "иста је као и стара" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "палиндром је" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "само промене величине слова" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "сувише је слична претходној" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "сувише је једноставна" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "изокренута је" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "нема довољно класа знакова" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "садржи превише истих знакова узастопно" #: modules/pam_cracklib/pam_cracklib.c:664 #, fuzzy msgid "contains too long of a monotonic character sequence" msgstr "садржи превише истих знакова узастопно" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "садржи корисничко име у неком облику" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Није понуђена лозинка" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Лозинка није промењена" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ЛОША ЛОЗИНКА: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s неуспех: излазни код %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s неуспех: ухваћен сигнал %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s неуспех: непознат статус 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %e. %b %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " са %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " на %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Последња пријава:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Добро дошли на ваш нови налог!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Последња неуспешна пријава:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "Био је %d неуспео покушај пријаве од последње успешне пријаве." msgstr[1] "Било је %d неуспела покушаја пријаве од последње успешне пријаве." msgstr[2] "Било је %d неуспелих покушаја пријаве од последње успешне пријаве." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "Било је %d неуспелих покушаја пријаве од последње успешне пријаве." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Превише пријава за „%s“." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Немате пошту." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Имате нову пошту." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Имате стару пошту." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Имате пошту." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Немате пошту у фасцикли %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Имате нову пошту у фасцикли %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Имате стару пошту у фасцикли %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Имате пошту у фасцикли %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Правим директоријум „%s“." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Не могу да направим директоријум „%s“." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Лозинка је већ у употреби. Изаберите другу." #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "Лозинка је већ у употреби. Изаберите другу." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Подразумевани безбедносни контекст %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Да ли желите да унесете другу улогу или ниво?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "улога:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Нема подразумеване врсте за улогу %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "ниво:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Неисправан безбедносни контекст" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Не могу да прибавим исправан контекст за %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Безбедносни контекст %s је додељен" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Контекст прављења кључа %s је додељен" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "неуспешна иницијализација PAM-а\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "неуспешно извршавање функције pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "пријава: грешка при гранању: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Промена STRESS лозинке за %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Унесите нову STRESS лозинку: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Поново унесите нову STRESS лозинку: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Потврда је погрешно укуцана; лозинка није промењена" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Налог је привремено закључан (остало је %ld секунди)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Налог је закључан због %u неуспелих пријава" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Грешка при аутентификацији" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Грешка услуге" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Непознат корисник" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Непозната грешка" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: задат је лош број за --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: није препозната опција %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file коренски-називдатотеке] [--user корисничкоиме] [--reset[=n]] [--" "quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: не могу да повратим све кориснике на број различит од нуле\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Пријава Неуспеси Последњи неуспех Са\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [- коренски-називдатотеке] [--file коренски-називдатотеке]\n" " [-u корисничкоиме] [--user корисничкоиме]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Приступ је одобрен (последњи приступ је био пре %ld секунди)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Ваш налог је истекао; обратите се администратору система" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Морате одмах да промените вашу лозинку (наметнуо root)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Морате одмах да промените вашу лозинку (застарела је)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Упозорење: ваша лозинка ће истећи кроз %d дан" msgstr[1] "Упозорење: ваша лозинка ће истећи кроз %d дана" msgstr[2] "Упозорење: ваша лозинка ће истећи кроз %d дана" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Упозорење: ваша лозинка ће истећи кроз %d дана" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS лозинка не може бити промењена." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Морате изабрати дужу лозинку" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Мењам лозинку за %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(тренутна) UNIX лозинка: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Морате дуже сачекати на промену лозинке" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Унесите нову UNIX лозинку: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Поново унесите нову UNIX лозинку: " #~ msgid "Would you like to enter a security context? [N] " #~ msgstr "Да ли желите да унесете безбедносни контекст? [N]" Linux-PAM-1.1.8/po/tg.gmo0000644000000000000000000000075712216527620011672 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Tajik (http://www.transifex.com/projects/p/fedora/language/tg/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: tg Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/ro.gmo0000644000000000000000000000103312216527620011664 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Romanian (http://www.transifex.com/projects/p/fedora/language/ro/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ro Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1)); Linux-PAM-1.1.8/po/insert-header.sin0000644000000000000000000000124012160065211013774 00000000000000# 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 } Linux-PAM-1.1.8/po/Rules-quot0000644000000000000000000000337612160065211012546 00000000000000# 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 Linux-PAM-1.1.8/po/km.po0000644000000000000000000005364412216527617011534 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Khoem Sokhem , 2006. # Leang Chumsoben , 2006. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 12:00+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: km\n" "Plural-Forms: nplurals=1; plural=0\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...អស់​ពេល...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...សូម​ទោស អ្នក​អស់​ពេល​ហើយ !\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "សន្ទនាច្រឡំ (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "ពាក្យសម្ងាត់ ៖ " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "ពាក្យ​សម្ងាត់ %s%s ថ្មី ៖" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "វាយ​ពាក្យ​សម្ងាត់ %s%s ថ្មី​ឡើង​វិញ ៖" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "សូម​ទោស ពាក្យ​សម្ងាត់​មិន​ដូច​គ្នា​ឡើយ ។" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "ចូល ៖" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "ជោគជ័យ" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "កំហុស​ធ្ងន់ធ្ងរ - បោះបង់ភ្លាមៗ" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "រក​មិន​ឃើញ​និមិត្ត​សញ្ញា" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "កំហុស​នៅ​ក្នុង​ម៉ូឌុល​សេវា" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "កំហុស​ប្រព័ន្ធ" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "កំហុស​សតិ​បណ្ដោះ​អាសន្ន" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "សិទ្ធិ​ត្រូវ​បាន​បដិសេធ" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "បរាជ័យ​ក្នុង​ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "លិខិត​សម្គាល់​មិន​គ្រប់គ្រាន់ដើម្បី​ចូល​ដំណើរ​ការ​ទិន្នន័យ​ដែល​មាន​ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "អ្នក​ប្រើ មិន​ស្គាល់​ម៉ូឌុលផ្ទៀងផ្ទាត់​ភាពត្រឹមត្រូវមូលដ្ឋាន" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "គណនី​អ្នក​ប្រើ​បាន​ផុត​កំណត់​ហើយ" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "មិន​អាច​បង្កើត ឬ យក​ធាតុ​មួយ​ចេញ សម្រាប់សម័យ​ដែល​បាន​បញ្ជាក់" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "សេវា​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ មិន​អាច​ទៅ​យក​លិខិត​សម្គាល់របស់អ្នក​ប្រើ" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "លិខិត​សម្គាល់របស់​អ្នក​ប្រើ​បាន​ផុត​កំណត់" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "បរាជ័យ​ក្នុង​ការ​កំណត់​លិខិត​សម្គាល់របស់អ្នក​ប្រើ" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "គ្មាន​ម៉ូឌុល​ទិន្នន័យជាក់លាក់​ត្រូវបង្ហាញ" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "បាន​ហុច​ធាតុមិន​ល្អ​ទៅ​ឲ្យ to pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "កំហុស​សន្ទនា" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "កំហុស​រៀបចំ​ថូខឹន​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "ព័ត៌មាន​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ​មិន​អាច​ត្រូវ​យកបាន​វិញ" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "ការ​ចាក់សោ​ថូខឹន​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវកំពុង​ជាប់​រវល់" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "ភាព​ចាស់​របស់​ថូខឹន​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ មិនបាន​អនុញ្ញាត" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "ការពិនិត្យ​មើលដំបូង​ដោយ​សេវា​ពាក្យ​សម្ងាត់​បាន​បរាជ័យ" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "តម្លៃ​ត្រឡប់​គួរត្រូវ​បាន​មិនអើពើ​ដោយ​ការ​បញ្ជូន PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "មិន​ស្គាល់​ម៉ូឌុល" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "ថូខឹនផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ​បាន​ផុត​កំណត់" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "ការ​សន្ទនា​កំពុង​រង់ចាំ​ព្រឹត្តិការណ៍" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "កម្មវិធី​ត្រូវ​តែ​ហៅ libpam ម្ដង​ទៀត" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "មិន​ស្គាល់​កំហុស PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "ដូច​គ្នា​នឹង​ពាក្យ​សម្ងាត់​ចាស់" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "ត្រឡប់​ចុះ​ឡើង" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "គ្រាន់​តែ​ផ្លាស់ប្ដូរ​លក្ខណៈ​អក្សរ​ប៉ុណ្ណោះ​" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ស្រដៀង​គ្នា​ណាស់​នឹង​ពាក្យ​សម្ងាត់​ចាស់" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "សាមញ្ញ​ពេក" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "បាន​បង្វិល" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "មិន​បាន​ផ្ដល់​ពាក្យសម្ងាត់" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "ពាក្យសម្ងាត់​មិន​បាន​ផ្លាស់ប្ដូរ​ឡើយ" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ពាក្យ​សម្ងាត់​មិន​ល្អ ៖ %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " ពី %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " លើ %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "ចូល​ចុងក្រោយ ៖%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "សូម​ស្វាគមន៍​មក​កាន់​គណនី​ថ្មី​របស់​អ្នក !" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "មាន​ការ​ចូល​ច្រើន​ពេក​សម្រាប់ '%s' ។" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "គ្មាន​សំបុត្រ ។" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "អ្នក​មាន​សំបុត្រ​ថ្មី ។" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "អ្នក​មាន​សំបុត្រ​ចាស់ ។" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "អ្នក​មាន​សំបុត្រ ។" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "អ្នក​គ្មានសំបុត្រនៅ​ក្នុង​ថត %s ។" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "អ្នក​មាន​សំបុត្រ​ថ្មី​នៅ​ក្នុង​ថត %s ។" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "អ្នក​មាន​សំបុត្រ​ចាស់​នៅ​ក្នុង​ថត %s ។" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "អ្នក​មាន​សំបុត្រ​នៅ​ក្នុង​ថត %s ។" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "ពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។" #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "ពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "មិន​មែន​ជា​បរិបទ​សុវត្ថិភាព​ត្រឹមត្រូវ​មួយឡើយ" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "បរិបទ​សុវត្ថិភាព %s បាន​ផ្ដល់​តម្លៃ​" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "បាន​បរាជ័យ​ក្នុង​ការ​ចាប់ផ្ដើម PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "បាន​បរាជ័យ pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "ចូល ៖ ចម្លង​ខ្លួន​ឯង​មិន​បាន​ជោគជ័យ ៖ %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "បញ្ចូល​ពាក្យ​សម្ងាត់ STRESS ថ្មី ៖ " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "វាយ​ពាក្យ​សម្ងាត់ STRESS ថ្មី​ម្ដង​ទៀត ៖ " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "ផ្ទៀងផ្ទាត់​អក្ខរាវិរុទ្ធ​ដែល​បាន​វាយខុស ពាក្យ​សម្ងាត់​មិន​បានផ្លាស់ប្ដូរ​" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "កំហុស​ក្នុង​ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវ" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "កំហុស​សេវា" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "មិន​ស្គាល់​អ្នក​ប្រើ" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "មិន​ស្គាល់​កំហុស" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s ៖ លេខ​មិន​ល្អ​បាន​ផ្ដល់​ទៅ --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s ៖ ជម្រើស​ដែល​មិន​ស្គាល់ %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s ៖ [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s ៖ មិន​អាច​កំណត់​អ្នក​ប្រើ​ទាំងអស់​ទៅ​មិនមែន​សូន្យ​ឡើងវិញ​បានទេ\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "គណនី​របស់​អ្នក​បាន​ផុតកំណត់​ហើយ សូម​ទាក់ទង​អ្នក​គ្រប់គ្រង​ប្រព័ន្ធ​របស់​អ្នក" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "អ្នក​ត្រូវ​តែ​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​របស់​អ្នក​ឥឡូវ​នេះ (root បាន​ចេញ​បញ្ជា)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "អ្នក​ត្រូវ​តែ​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​របស់​អ្នក​ឥឡូវ​នេះ (ពាក្យសម្ងាត់​ចាស់​ហើយ)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "មិន​អាច​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់ NIS បាន​ឡើយ ។" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "អ្នក​ត្រូវ​តែ​ជ្រើស​ពាក្យសម្ងាត់​វែង​ជាង​នេះ" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(បច្ចុប្បន្ន) ពាក្យ​សម្ងាត់ UNIX ៖" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "អ្នក​ត្រូវ​តែ​រង់ចាំ​បន្តិច ដើម្បី​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​របស់​អ្នក" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "បញ្ចូល​ពាក្យ​សម្ងាត់ UNIX ថ្មី ៖ " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "វាយ​ពាក្យ​សម្ងាត់ UNIX ថ្មី​ម្ដង​ទៀត ៖ " Linux-PAM-1.1.8/po/fr.gmo0000644000000000000000000003004412216527620011657 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % 8,XDR:5"BX:,=7Xug46 %k K 2 1!,M!Fz!*!#!"%'""M"#p"&"("&" #@,#m#P#7#Y$+o$%$$2$%*%-9%g%(%%.%%&#$&H&5f&&&& &&&) ''5'#]'''''''C'+(W(!+)@M)/))))$)8*@T*/*o*75+$m+5+E+G,*V,,0,,-,/-F-,c->-?-.5..4d.4.."./(/ :/G/a/|///"//:/0,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-01-12 17:52+0000 Last-Translator: Jérôme Fenal Language-Team: French MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fr Plural-Forms: nplurals=2; plural=(n > 1); %A %e %B %Y à %H:%M:%S %Z de %.*s sur %.*s%s échec : signal capté %d%s%s échec : code de sortie %d%s échec : statut 0x inconnu%x%s: Numéro incorrect attribué à --reset= %s: Impossible de réinitialiser tous les utilisateurs à non-zéro %s : Option non reconnue %s %s: [--file chemin du fichier] [--user nom d'utilisateur] [--reset[=n]] [--quiet] %s: [-f chemin du fichier] [--file chemin du fichier] [-u nom d'utilisateur] [--user nom d'utilisateur] [-r] [--reset[=n]] [--quiet] Mot de passe UNIX (actuel) : ...Votre temps est épuisé ! ...Temps bientôt écoulé... Accès accordé (dernier accès il y a %ld secondes).Compte temporairement verrouillé dû à l'échec de %u connexionsCompte temporairement verrouillé (%ld secondes restantes)L'application doit appeler à nouveau libpamErreur d'authentificationÉchec d'authentificationImpossible de récupérer les informations d'authentificationLe service d'authentification n'a pas pu récupérer les informations d'authentificationLe service d'authentification n'a pas pu récupérer les informations d'identification de l'utilisateurPéremption du jeton d'authentification désactivéeLe jeton d'authentification a expiréLe jeton d'authentification n'est plus valide ; un nouveau jeton est requisJeton d'authentification occupéErreur de manipulation du jeton d'authentificationMOT DE PASSE INCORRECT : %sÉlément incorrect transmis à pam_*_item()Impossible de créer/supprimer une entrée pour la session spécifiéeChangement du mot de passe STRESS pour %s.Changement du mot de passe pour %s.Erreur de conversationConversation en attente d'événementCréation du répertoire « %s ».Erreur critique - abandon immédiatContexte de sécurité par défaut %s Entrer le nouveau mot de passe STRESS : Entrez le nouveau mot de passe UNIX : Erreur dans le module de serviceÉchec du contrôle préliminaire par le service de mot de passeÉchec de chargement du moduleÉchec lors de la définition des informations d'identification de l'utilisateurNombre maximum de tentatives épuisées pour le serviceInformations d'identification insuffisantes pour accéder aux données d'authentificationContexte de création de clés %s attribuéDernière connexion échoué : %s%s%sDernière connexion :%s%s%sConnexion Échecs Dernier échec De Erreur du tampon mémoireModule inconnuLe mot de passe NIS n'a pas pu être changé.Nouveau %s%smot de passe : Aucun type par défaut pour le rôle %s Aucun message.Aucune donnée spécifique au module présenteAucun mot de passe fourniContexte de sécurité invalideChangement du mot de passe avorté.Mot de passe déjà utilisé.Mot de passe déjà utilisé. Choisissez-en un autre.Mot de passe inchangéMot de passe : Autorisation refuséeRetapez %sRetapez le nouveau %s%smot de passe : Retaper le nouveau mot de passe STRESS : Retapez le nouveau mot de passe UNIX : Contexte de sécurité %s attribuéErreur de serviceLes mots de passe ne correspondent pas.SuccèsSymbole non trouvéErreur systèmeLa valeur retournée devrait être ignorée par la répartition PAMIl y a %d tentative échouée de connexion depuis la dernière connexion réussie.Il y a %d tentatives échouées de connexion depuis la dernière connexion réussie.Il y a eu %d tentatives de connexion échouées depuis la dernière connexion réussie.Trop de connexions pour « %s ».Impossible de créer et d'initialiser le répertoire « %s ».Impossible d'obtenir un contexte valide pour %sErreur PAM inconnueErreur inconnueUtilisateur inconnuLe compte de l'utilisateur a expiréInformations d'identification de l'utilisateur expiréesUtilisateur inconnu par le module d'authentification sous-jacentVérification erronée : mot de passe inchangéAvertissement : votre mot de passe expire dans %d jour.Avertissement : votre mot de passe expire dans %d joursAvertissement : votre mot de passe expire dans %d joursBienvenue sur votre nouveau compte !Voulez-vous entrer un niveau ou un rôle différent ?Vous devez changer votre mot de passe immédiatement, il est périméVous devez changer votre mot de passe immédiatement (imposé par root)Vous avez des messages dans le dossier %s.Vous avez des messages.Vous avez un nouveau message dans le dossier %s.Vous avez un nouveau message.Vous n'avez aucun message dans le dossier %s.Vous avez un ancien message dans le dossier %s.Vous avez un ancien message.Vous devez choisir un mot de passe plus longVous devez encore attendre avant de changer votre mot de passeVotre compte a expiré. Contactez votre administrateur systèmechangement de casse uniquementcontient le nom d'utilisateur d'une certaine manièrecontient trop de caractères consécutifs identiquescontient trop de caractères consécutifs identiquesconversation erronnée (%d) échec de l'initialisation de PAM échec de pam_set_item() est un palindromeest inverséest identique à l'ancienressemble trop à l'ancienest trop simpleniveau :login : login : échec d'autoclônage : %merreur d'allocation de mémoireles caractères utilisés ne sont pas suffisamment variésrôle :Linux-PAM-1.1.8/po/te.po0000644000000000000000000006005512216527620011521 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Krishnababu Krothapalli , 2008-2009 # sudheesh001 , 2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-30 11:58+0000\n" "Last-Translator: sudheesh001 \n" "Language-Team: Telugu (http://www.transifex.com/projects/p/fedora/language/" "te/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: te\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...సమయం అయిపోతోంది...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...క్షమించాలి, మీ సమయం అయిపోయింది!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "తప్పుడు సంభాషణలు (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "సంకేతపదము: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "కొత్త %s%sసంకేతపదము: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "కొత్త %s%sసంకేతపదమును మరలాటైపుచేయుము: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "క్షమించాలి, సంకేతపదము సరిపోలలేదు." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "తిరిగిటైపుచేయి %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "సంకేతపదము మార్పు తప్పించబడింది" #: libpam/pam_item.c:311 msgid "login:" msgstr "లాగిన్:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "సఫలం" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "సంక్లిష్ట దోషము - తక్షణ యెబార్టు" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "మాడ్యూల్ లోడుచేయుటకు విఫలమైంది" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "చిహ్నము కనబడలేదు" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "సేవా మాడ్యూల్‌నందు దోషము" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "సిస్టమ్ దోషము" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "మెమొరీ బఫర్ దోషము" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "అనుమతి నిరాకరించబడింది" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "దృవీకరణ వైఫల్యము" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "దృవీకరణ డాటాను యాక్సిస్ చేయుటకు సరిపోని ఆనవాళ్ళు" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "దృవీకరణ సేవ దృవీకరణ సమాచారమును వెలికితీయలేక పోయింది" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "క్రిందనవున్న దృవీకరణ మాడ్యూల్‌కు వినియోగదారి తెలియదు" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "సేవకొరకు గరిష్ట సంఖ్యలో పునఃప్రయత్నాలను కలిగివుంది" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "దృవీకరణ టోకెన్ అవసరములేదు, కొత్తది అవసరము" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "వినియోగదారి ఖాతా కాలముతీరినది" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "తెలుపబడి సెషన్‌కు యెటువంటి ప్రవేశమును చెయలేవు/తొలగించలేవు" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "దృవీకరణ సేవ వినియోగదారి ఆనవాళ్ళను వెలికితీయలేదు" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "వినియోగదారి ఆనవాళ్ళు కాలముతీరినవి" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "వినియోగదారి ఆనవాళ్ళను అమర్చుటలో విఫలము" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "మాడ్యూల్ ప్రత్యేకమైన డాటాలేదు" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item() ద్వారా చెడ్డఅంశము వెళ్ళింది" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "సంభాషణా దోషము" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "దృవీకరణ టోకెన్ మానిప్యులేషన్ దోషము" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "దృవీకరణ సమాచారము తిరిగిపొందబడదు" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "దృవీకరణ టోకెన్ లాక్ బ్యుజీగావుంది" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "దృవీకరణ టోకెన్ యేజింగ్ అచేతనమైంది" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "సంకేతపదము సేవద్వారా ప్రాధమిక పరిశీలన విఫలమైంది" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "తిరిగియిచ్చు విలువ PAM పంపిణీచేత వదిలివేయబడాలి" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "మాడ్యూల్ తెలియనిది" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "దృవీకరణ టోకెన్ కాలముతీరినది" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "సంభాషణ ఘటనకొరకు వేచివుంది" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "libpamను అనువర్తనము మరలా కాల్‌చేయవలసివుంది" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "తెలియని PAM దోషము" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "ఇది పాతదేనా" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "సంభాషణా దోషము" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "పాలిండ్రోమా" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "కేస్ మార్పులు మాత్రమే" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "పాతదానికి మరీ దగ్గరపోలికగావుంది" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "మరీ సరళంగావుంది" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "ఇది పర్యాయంగానా" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "సరిపోవునంత కారెక్టర్ క్లాసెస్ లేవు" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "ఒకదానితర్వాత వొకటి అదే అక్షరాలు చాలావున్నాయి" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "ఒకదానితర్వాత వొకటి అదే అక్షరాలు చాలావున్నాయి" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "ఒకరకంగా వినియోగదారి నామమును కలిగివుంది" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "ఎటువంటి సంకేతపదము యివ్వలేదు" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "సంకేతపదము మార్చలేదు" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "చెడ్డ సంకేతపదము: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s విఫలమైంది: బహిష్కరణ కోడ్ %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s విఫలమైంది: సంకేతము %d%s పొదింది" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s విఫలమైంది: తెలియని స్థితి 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s నుండి" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s పైన" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "చివరి లాగిన్:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "మీ కొత్త ఖాతాకు స్వాగతము!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "చివరిగా విఫలమైన లాగిన్:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "చివరి సమర్ధవంతపు లాగిన్‌నుండి ఆక్కడ %d విఫల లాగిన్ ప్రయత్నం వుంది." msgstr[1] "చివరి సమర్ధవంతపు లాగిన్‌నుండి ఆక్కడ %d విఫల లాగిన్ ప్రయత్నాలు వున్నాయి." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "చివరి సమర్ధవంతపు లాగిన్‌నుండి ఆక్కడ %d విఫల లాగిన్ ప్రయత్నాలు వున్నాయి." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' కొరకు మరీయెక్కువ లాగిన్‌లు" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "మెయిల్ లేదు." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "మీరు కొత్త మెయిల్ కలిగివున్నారు." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "మీరు పాత మెయిల్ కలిగివున్నారు." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "మీరు మెయిల్ కలిగివున్నారు." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "మీరు ఫోల్డరు %sనందు యెటువంటి మెయిల్ కలిగిలేరు." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "మీరు ఫోల్డరు %sనందు కొత్త మెయిల్‌ను కలిగివున్నారు." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "మీరు ఫోల్డరు %sనందు పాతమెయిల్‌ను కలిగివున్నారు." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "మీరు ఫోల్డరు %sనందు మెయిల్‌ను కలిగివున్నారు." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "డెరెక్టరీ '%s' సృష్టించుట." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "డైరెక్టరీ %sను సృష్టించలేక పోయింది మరియు సిద్దీకరించలేక పోయింది." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "సంకేతపదము యిప్పటికే వుపయోగించబడింది. మరియొకదానిని యెంచుకొనుము." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "సంకేతపదము యిప్పటికే వుపయోగించబడింది." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "అప్రమేయ రక్షణ సందర్భము %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "మీరు విభిన్న పాత్రను లేదా స్థాయిని ప్రవేశపెడదామని అనుకుంటున్నారా?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "పాత్ర:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "పాత్ర %sకొరకు యెటువంటి అప్రమేయ రకములేదు\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "స్థాయి:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "విలువైన రక్షణ సందర్భముకాదు" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s కొరకు విలువైన సందర్భమును పొందలేకపోయింది" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "రక్షణ సందర్భము %s అప్పగించబడింది" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "కీ సృష్టీకరణ సందర్భము %s అప్పగించబడింది" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM సిద్దముచేయుటలో విఫలమైంది\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() విఫలమైంది\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: failure forking: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "STRESS సంకేతపదమును %sకొరకు మార్చబడింది." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "కొత్త STRESS సంకేతపదమును ప్రవేశపెట్టుము: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "కొత్త STRESS సంకేతపదమును తిరిగిటైపుచేయుము: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "తప్పుగా-చేసినటైపు నిర్ధారణ; సంకేతపదము మార్చబడలేదు" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "ఖాతా తాత్కాలికంగా లాక్‌చేయబడింది (%ld సెకనులు మిగిలినవి)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u లాగిన్‌ల వైఫల్యం కారణంగా ఖాతా లాక్అయింది" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "దృవీకరణం దోషము" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "సేవ దోషము" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "తెలియని వినియోగదారి" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "తెలియని దోషము" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s:చెడ్డ సంఖ్య యివ్వబడింది --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: గుర్తించని ఐచ్చికము %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: వినియోగదారులనందరిని సున్నా-కానిదానికి తిరిగివుంచలేము\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "లాగిన్ విఫలమైంది సరికొత్త వైఫల్యం దీనినుండి\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "యాక్సిస్ యివ్వబడింది (చివరిగా యాక్సిస్ చేసినది %ld సెకనుల క్రితం)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "మీ ఖాతా కాలముతీరినది; దయచేసి మీ సిస్టమ్ నిర్వాహకుడిని సంప్రదించండి" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "మీరు మీ సంకేతపదమును తక్షణమే మార్చవలసివుంది (root enforced)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "మీరు మీ సంకేతపదమును తక్షణమే మార్చవలసివుంది (password aged)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "హెచ్చరిక: మీ సంకేతపదము %d రోజులో కాలముతీరుతుంది" msgstr[1] "హెచ్చరిక: మీ సంకేతపదము %d రోజులలో కాలముతీరుతుంది" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "హెచ్చరిక: మీ సంకేతపదము %d రోజులలో కాలముతీరుతుంది" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS సంకేతపదము మార్చబడ లేకపోయింది." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "మీరు తప్పక పొడవాటి సంకేతపదమును యెంచుకొనవలెను." #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s కొరకు సంకేతపదమును మార్చుతోంది" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(ప్రస్తుత) UNIX సంకేతపదము: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "మీ సంకేతపదమును మార్చుటకు మీరు ఎక్కువసేపు వేచివుండాలి" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "కొత్త UNIX సంకేతపదమును ప్రవేశపెట్టుము: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "కొత్త UNIX సంకేతపదమును తిరిగిటైపు చేయుము: " Linux-PAM-1.1.8/po/ko.gmo0000644000000000000000000002714412216527620011670 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %  +%G.mE"GuM5H#/lBA ! /%=6c<'N %c   - = "&! I!j!?!!#!""9"$Q"(v"""#"=";#"Y#|#D###) $7$0H$y$!$$!$&$+%T0%%%%%%% &(&@&5Q&&&&2&N&M='''@'7',(F(\(u((6(C(. ).O)8~);):)B.*$q**'*!*$*.+!L+(n+9+N+ ,=7,Lu,M,-.-D-1[- ----- -,-.%5.[.,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-16 13:34+0000 Last-Translator: eukim Language-Team: Korean (http://www.transifex.com/projects/p/fedora/language/ko/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ko Plural-Forms: nplurals=1; plural=0; %a %b %e %H:%M:%S %Z %Y %.*s에서 시작 일시 %.*s%s 실패: 신호 발견 %d%s%s 실패: 종료 코드 %d%s 실패: 알 수 없는 상태 0x%x%s: 잘못된 숫자가 --reset=에 설정됨 %s: 모든 사용자를 영이 아닌 값으로 설정할 수 없음 %s: 알려지지 않은 옵션 %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (현재) UNIX 암호:...죄송합니다. 시간이 초과되었습니다! ..시간 초과... 액세스 허용 (%ld 초 전 마지막으로 액세스되었습니다) %u 로그인 실패로 인해 계정이 잠김 일시적으로 계정이 잠금되었습니다 (%ld 초 남음) libpam을 다시 불러오려면 응용 프로그램이 필요함인증 오류인증 실패인증 정보를 복구할 수 없음인증 서비스가 인증 정보를 읽을 수 없음인증 서비스에서 사용자 인증을 읽을 수 없음인증 토큰 기한이 비활성화됨인증 토큰 만료더이상 인증 토큰이 유효하지 않음: 새로운 인증 토큰 필요인증 토큰 잠금 장치 사용중인증 토근 수정 오류잘못된 암호: %spam_*_item()에 잘못된 항목이 전달됨특정 세션에 대해 항목을 생성/삭제할 수 없음%s에 대한 STRESS 암호 변경 %s에 대한 암호 변경 중 인증 대화 오류이벤트를 위해 인증 대화를 기다리는 중 입니다'%s' 디렉토리 생성 중. 치명적인 오류 - 즉시 중지기본값 보안 문맥 %s 새 STRESS 암호 입력:새 UNIX 암호 입력:서비스 모듈에서 오류 발생암호 서비스로 사전 확인 실패모듈 가져오기 실패사용자 인증 설정 실패서비스를 최대로 재시도함인증 데이터에 액세스하기에 인증이 불충분함키 생성 문맥 %s 할당 마지막 로그인 실패:%s%s%s 마지막 로그인:%s%s%s로그인 실패 마지막 실패 다음에서 발생 메모리 버퍼 오류모듈을 알 수 없음NIS 암호는 변경할 수 없습니다.새 %s%s 암호:%s 역할에 대한 기본값 유형이 없음 메일 없음.특정 모듈 데이터가 없음암호가 없음유효한 보안 문맥이 없음암호가 변경되지 않습니다. 이미 사용되고 있는 암호입니다.이미 사용되고 있는 암호입니다. 다른 암호를 선택해 주십시오.암호가 변경되지 않음암호:권한 부여 거부다시 입력 %s 새 %s%s 암호 재입력:새 STRESS 암호를 재입력:새 UNIX 암호 재입력:보안 문맥 %s 할당서비스 오류죄송합니다. 암호가 일치하지 않습니다.성공기호를 찾을 수 없음시스템 오류복귀 값은 PAM 디스패치에 의해 무시됨마지막 로그인 후 %d 번의 로그인 시도가 실패하였습니다. 마지막 로그인 후 %d 번의 로그인 시도가 실패하였습니다. '%s' 대해 너무 많이 로그인함.'%s' 디렉토리를 생성 및 초기화할 수 없습니다. %s에 대한 유효한 문맥을 가져올 수 없음 알 수 없는 PAM 오류알 수 없는 오류알 수 없는 사용자사용자 계정 만료사용자 인증 만료기본 인증 모듈에서 사용자를 알 수 없음암호 확인에서 잘못 입력됨; 암호가 변경되지 않음경고: %d일 내로 암호가 만료됩니다경고: %d일 내로 암호가 만료됩니다새로운 계정을 사용해 주셔서 감사합니다!다른 역할 또는 레벨을 입력하시겠습니까? 암호를 즉시 변경해 주십시오 (오래된 암호)암호를 즉시 변경해 주십시오 (root가 강제 설정함)%s 폴더에 메일이 있습니다.메일이 있습니다.%s에 새로운 메일이 있습니다.새로운 메일이 있습니다.%s 폴더에 메일이 없습니다.%s 폴더에 오래된 메일이 있습니다.오래된 메일이 있습니다.더 긴 암호를 선택해 주십시오암호 변경을 위해 조금더 기다려 주십시오.계정이 만료되었습니다: 시스템 관리자에게 알려 주십시오대소문자만 변경어떠한 형식으로 사용자 이름을 포함합니다. 너무 길게 단순한 문자가 연속적으로 포함되어 있습니다 너무 많은 동일한 문자가 연속적으로 포함되어있습니다 잘못된 인증 대화 (%d) PAM 초기화 실패 pam_set_item() 실패 앞뒤 어느쪽에서 읽어도 같은 문맥임교체됨이전 암호와 같음이전 암호와 유사함너무 간단함레벨: 로그인:로그인: 포크 작업(forking) 실패: %m메모리 할당 오류 문자 클래스가 부족합니다 역할: Linux-PAM-1.1.8/po/el.po0000644000000000000000000003221012216527617011507 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/ro.po0000644000000000000000000003235312216527620011531 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/fedora/language/" "ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" "2:1));\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" msgstr[2] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" msgstr[2] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/ia.po0000644000000000000000000004375412216527617011517 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Nik Kalach , 2012 # Nik Kalach , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-12-17 22:00+0000\n" "Last-Translator: Nik Kalach \n" "Language-Team: Interlingua \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ia\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Le tempore es perimente...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Le tempore ha perimite!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "conversation erronee (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Contrasigno: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nove %s%scontrasigno: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Retypa nove %s%scontrasigno: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Le contrasignos non es equal." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Retypa %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Cambiamento de contrasigno abortate." #: libpam/pam_item.c:311 msgid "login:" msgstr "conto:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Successo" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Error critic - abandono immediate" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Insuccesso de cargar un modulo" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbolo non trovate" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Error in le modulo de servicio" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Error de systema" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Error de buffer de memoria" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Permission denegate" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Fallimento de authentication" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Credentiales insufficiente pro acceder a datos de authentication" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" "Le servicio de authentication non pote recuperar le information de " "authentication" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Usator es incognite pro le modulo de authentication subjacente" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Il ha superate le numero maxime de tentativas pro le servicio" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" "Le token de authentication non es jam valide; un nove token es necessari" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Le conto del usator ha perimite" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Impossibile de crear o eliminar un entrata pro le session specificate" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "Le servicio de authentication non pote obtener le credentiales del usator" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Credentiales del usator perimite" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Insuccesso al definition de credentiales de usator" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Nulle datos specific del modulo es presente" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Elemento incorrecte passate a pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Error de conversation" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Error de manipulation del token de authentication" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Impossibile de recuperar le information de authentication" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Le token de authentication pare occupate" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Peremption del token de authentication disactivate" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Insuccesso del controlo preliminar per le servicio de contrasignos" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Le valor restitute debe esser ignorate per le repartitor PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Modulo incognite" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Le token de authentication ha perimite" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Conversation in expectation de un evento" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Le application debe appellar a libpam de nove" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Error incognite de PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "nove contrasigno es equl al previe" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "error al allocation de memoria" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "nove contrasigno es un polindromo" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "nove contrasigno cambia solo le registro de litteras" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "nove contrasigno es troppo simile al previe" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "nove contrasigno es troppo simple" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "nove contrasigno es un rotation del previe" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "nove contrasigno non ha satis de classes de character" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "nove contrasigno contine troppo de characteres identic consequente" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "nove contrasigno contine tro de characteres monotone in un sequentia" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "nove contrasigno contine le nomine de usator in alicun forma" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Necun contrasigno fornite" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Le contrasigno non ha cambiate" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "CONTRASIGNO MALFORMATE: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s fallite: codice de exito %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s fallite: signal capturate %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s fallite: stato incognite 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " de %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " via %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Ultime connexion:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Benvenite al nove conto!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Ultime connexion fallite:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Il esseva %d insuccesso de initiar le session desde le ultime connexion." msgstr[1] "" "Il esseva %d insuccessos de initiar le session desde le ultime connexion." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Il esseva %d insuccessos a initiar le session desde le ultime connexion." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Troppo de connexiones pro '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Nulle currero." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Il ha nove currero." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Il ha currero vetule." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Il ha currero." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Il non ha necun curreros in le dossier %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Il ha nove currero in le dossier %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Il ha currero vetule in le dossier %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Il ha currero in le dossier %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Creation del directorio '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Impossibile de crear e de initiar le directorio '%s'." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Le contrasigno jam se ha utilisate. Selige un altere." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Le contrasigno se ha jam usate." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Contexto de securitate predefinite %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Velle tu introducer un rolo e nivello differente?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rolo:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Necun typo predefinite pro le rolo %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "nivello:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Contexto de securitate incorrecte" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Impossibile de obtener un contexto valide pro %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Contexto de securitate %s attribuite" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Contexto de creation de clave %s attribuite" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "error al initiar PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "error in pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "apertura de session: insuccesso de autoclonage: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Cambiamento del contrasigno STRESS pro %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Introduce le nove contrasigno STRESS: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Repete le nove contrasigno STRESS: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Error al verification; contrasigno non cambiate" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Le conto es blocate temporarimente (%ld secundas remanente)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Le conto es blocate a causa de %u insuccessos al authentication" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Error de authentication" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Error de servicio" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Usator incognite" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Error incognite" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Numero incorrecte fornite a --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Option non recognoscite %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file percurso-integre] [--user usator] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Impossibile de reinitiar tote le usatores a non-zero\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Conto Fallimentos Ultime fallimento De\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f percurso-integre] [--file percurso-integre]\n" " [-u usator] [--user usator]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Accesso permittite (le ultime accesso eveniva ante %ld secundas)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Le conto ha perimite; contacte le administrator del systema" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Le administrator necessita le cambiamento immediate del contrasigno." #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Le contrasigno es troppo vetule e debe esser cambiate immediatemente." #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Advertimento: le contrasigno perimera in %d die" msgstr[1] "Advertimento: le contrasigno perimera in %d dies" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Advertimento: le contrasigno perimera in %d dies" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Le contrasigno NIS non pote esser cambiate." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Selige un contrasigno plus longe" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Cambiamento del contrasigno pro %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "Contrasigno UNIX (actual):" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Attende ancora pro cambiar le contrasigno" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Introduce le nove contrasigno UNIX: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Repete le nove contrasigno UNIX: " Linux-PAM-1.1.8/po/fa.po0000644000000000000000000003220312216527617011477 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Persian (http://www.transifex.com/projects/p/fedora/language/" "fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/lv.po0000644000000000000000000003234412216527617011540 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/fedora/language/" "lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " "2);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" msgstr[2] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" msgstr[2] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/lt.gmo0000644000000000000000000000106312216527620011666 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Lithuanian (http://www.transifex.com/projects/p/fedora/language/lt/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: lt Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2); Linux-PAM-1.1.8/po/zu.po0000644000000000000000000004052512216527620011547 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:57+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zu\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Isikhathi siyaphela...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Uxolo, isikhathi sakho sesiphelile!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "ingxoxo enephutha (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Iphasiwedi: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "%s%siphasiwedi entsha: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Thayipha kabusha %s%siphasiwedi entsha: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Uxolo, amaphasiwedi awahambelani." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "ngena:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Impumelelo" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Iphutha elibucayi - yeka ngokushesha" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Ihlulekile ukunezela umkhiqizo owenezelwayo" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Uphawu alutholakali" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Iphutha kwimoduli yesevisi" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Iphutha lesistimu" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Iphutha lengobo yesikhashana yememori" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Imvume inqatshiwe" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Ukwehluleka kokugunyaza" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Izinhlamvu zamagama ezinganele zokungena ekwazisweni kokugunyaza" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Isevisi yokugunyaza ayikwazi ukulanda ukwaziswa kokugunyaza" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Umsebenzisi akaziwa kwimoduli yokugunyaza engabonakali" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Isifinyelele ekugcineni kwezikhathi ezivumelekile zokuzama le sevisi" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Isiqinisekiso sokugunyaza asisasebenzi, kudingeka esisha" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "I-akhawunti yomsebenzisi iphelelwe isikhathi" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Ayikwazi ukwakha/ukususa okufakiwe kohlelo olubonisiwe" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Isevisi yokugunyaza ayikwazi ukulanda izinhlamvu zomsebenzisi" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Izinhlamvu zomsebenzisi ziphelelwe isikhathi" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Ukwehluleka ukusetha izinhlamvu zomsebenzisi" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Akukho ukwaziswa okuthile kwemoduli okutholakalayo" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Into embi idluliselwe kwi-pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Iphutha lengxoxo" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Iphutha lokufaka isiqinisekiso sokugunyaza" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Ukwaziswa kokugunyaza akukwazi ukubuyiseka" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Isihluthulelo sesiqinisekiso sokugunyaza simatasa" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Ukuphela kwesikhathi sesiqinisekiso sokugunyaza kucishiwe" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Ukuhlola kokuqala okuhlulekile ngesevisi yephasiwedi" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "I-value yokubuyisa kufanele inganakwa ukuthumela kwe-PAM " #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Imoduli ayaziwa" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Isiqinisekiso sokugunyaza siphelelwe isikhathi" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Ingxoxo ilinde isenzakalo" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Uhlelo ludinga ukubiza i-libpam futhi" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Iphutha le-PAM elingaziwa" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "iyafana nendala" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "iyi-palindrome" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "kushintshe onobumba kuphela" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ifana kakhulu nendala" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "ilula kakhulu" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "ijikelezisiwe" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Ayikho iphasiwedi enikeziwe" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Iphasiwedi ayishintshwanga" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "IPHASIWEDI ENGASEBENZI: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "%a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "kusukela %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "ku-%.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Ukungena kokugcina:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Uyamukelwa kwi-akhawunti yakho entsha!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Kuningi kakhulu ukungena kwi- '%s' osekwenziwe." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Ayikho imeyili." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Unemeyili entsha." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Unemeyili endala." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Unemeyili." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Akukho meyili onayo kwifolda %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Unemeyili entsha kwifolda %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Unemeyili endala kwifolda %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Unemeyili kwifolda %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye." #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Akuyona indawo yokuphepha esemthethweni" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Indawo %s Yokuphepha Yabelwe" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "Ihlulekile ukulungiselela ukuqalisa i-PAM \n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "Ihlulekile ukwenza i-pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "ngena: Ihlulekile ukuhlukanisa: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Faka iphasiwedi entsha ye-STRESS: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Thayipha iphasiwedi entsha ye-STRESS: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Ukufakazela akuthayiphiwanga kahle; iphasiwedi ayishintshwanga" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Iphutha lokugunyaza" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Iphutha lesevisi" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Umsebenzisi ongaziwa" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Iphutha elingaziwa" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Inombolo eyiphutha enikeziwe ukuba --uqale kabusha=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Okukhethile okungaziwa %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: Ayikwazi ukusetha kabusha bonke abasebenzisi ibase enombolweni ongelona " "iqanda\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "I-akhawunti yakho isiphelelwe isikhathi, sicela uthintana nomqondisi " "wesistimu yakho" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" "Kudingeka ukuba ushintshe iphasiwedi yakho ngokushesha (iphoqelelwa " "ngumqondisi)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" "Kudingeka ukuba ushintshe iphasiwedi yakho ngokushesha (iphasiwedi indala)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Iphasiwedi ye-NIS ayivumanga ukushintshwa." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Kumelwe ukhethe iphasiwedi ethe ukuba yinjana" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "Iphasiwedi ye-UNIX (yamanje): " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Kumelwe ulinde isikhashana ukuze ushintshe iphasiwedi yakho" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Faka iphasiwedi entsha ye-UNIX: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Thayipha iphasiwedi entsha ye-UNIX: " Linux-PAM-1.1.8/po/ks.gmo0000644000000000000000000000076212216527620011671 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Kashmiri (http://www.transifex.com/projects/p/fedora/language/ks/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ks Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/tg.po0000644000000000000000000003224212216527620011520 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Tajik (http://www.transifex.com/projects/p/fedora/language/" "tg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/tr.gmo0000644000000000000000000002675712216527620011715 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %(*"S&v1?O,u|&7<2t6C"8%N.t8/) @6 *w -  1 7!+L!1x!! !!"!$"@"^"u"-""*"/".*#'Y###1### $-$%B$ h$t$$'$$#$5 %?%W%`%p%$%'%%% &(& D&P&c&<r&&TY''')'('(7(%N(%t(C(+(u )<))2)E*KV******(+C+!_+9+O+' ,*3,.^,(,,,%,3 -?-P-a- x---#----,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-01-08 21:22+0000 Last-Translator: ismail yenigül Language-Team: Turkish (http://www.transifex.com/projects/p/fedora/language/tr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: tr Plural-Forms: nplurals=2; plural=(n > 1); %e %b %a %H:%M:%S %Z %Y %.*s makinesinden %.*s üzerinde%s başarısız: %d%s sinyali yakalandı%s başarısız: çıkış kodu %d%s başarısız: bilinmeyen durum 0x%x%s: --reset argümanına geçersiz sayı verildi %s: Tüm kullanıcılara sıfır olmayan bir değer atanamadı %s: Tanınmayan seçenek %s %s: [--file DosyanınTamYolu] [--user KullanıcıAdı] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (geçerli) parola: ...Üzgünüm, süreniz doldu! ...Zaman geçiyor... Erişim izni verildi (son erişim %ld saniye önceydi).Hesap %u başarısız giriş yüzünden kilitlendiHesap geçici bir süre kilitlendi (%ld saniye kaldı)Uygulamanın libpam kütüphanesini yeniden çağırması gerekiyorYetkilendirme hatasıYetkilendirme hatasıYetkilendirme bilgisi kurtarılamadıYetkilendirme servisi yetki bilgisini alamadıYetkilendirme servisi kullanıcı kimliğini getiremiyorYetkilendirme anahtarı vadesi pasifleştirildiYetkilendirme anahtarının süresi dolduYetkilendirme anahtarı artık geçerli değil; yenisi gerekiyorYetkilendirme anahtarının kilidi meşgulYetkilendirme anahtarı manipülasyon hatasıKÖTÜ PAROLA: %spam_*_item() fonksiyonuna yanlış öğe geçildiBelirtilen oturum için girdi yapılamıyor/silinemiyor%s için STRESS parolası değiştiriliyor.%s kullanıcısının parolası değiştiriliyor.Etkileşim hatasıEtkileşim için olay bekleniyor%s dizini oluşturuluyor.Kritik hata - şimdi çıkılıyorÖntanımlı Güvenlik Bağlamı %s Yeni STRESS parolası girin: Yeni parolayı girin: Servis modülünde hataParola servisi ön denetimi başarısız olduModül yüklenemediKullanıcı kimlik bilgileri ayarlanamadıServis için geçerli deneme sayısı aşıldıKimlik bilgisine ulaşmak için yetersiz yetkiAnahtar Oluşturma Bağlamı %s AtandıSon başarısız giriş:%s%s%sSon giriş:%s%s%sGiriş Hatalar Son hata Kim Tampon bellek hatasıModül bilinmiyorNIS parolası değiştirilemiyorYeni %s%sparolası: %s rolü için öntanımlı tür yok İleti yok.Modüle özgü veri yokParola girilmediGeçerli bir güvenlik bağlamı değilParola değişimi iptal edildi.Parola önceden kullanılmıştır.Parola kullanımda. Lütfen başka bir parola seçin.Parola değiştirilmediParola: İzin verilmedi%s'i tekrar girinYeni %s%sparolasını tekrar girin: Yeni STRESS parolasını tekrar girin: Yeni parolayı tekrar girin: Güvenlik Bağlamı %s AtandıServis hatasıÜzgünüm, parolalar birbirine uymuyor.BaşarılıSembol bulunamadıSistem hatasıDönüş değeri PAM dispatch tarafından gözardı edilmeliSon başarılı girişten itibaren %d başarısız kimlik doğrulama girişimi oldu.Son başarılı girişten itibaren %d başarısız kimlik doğrulama girişimi oldu.Son başarılı girişten itibaren %d başarısız kimlik doğrulama girişimi oldu.%s için çok fazla giriş.%s dizini oluşturulamadı.%s için geçerli bir bağlam alınamadıBilinmeyen PAM hatasıBilinmeyen hataBilinmeyen kullanıcıKullanıcı hesabının süresi dolduKullanıcı kimliğinin süresi dolduKullanıcı, yetkilendirme modülü altyapısında tanımlı değilDoğrulama hatalı; parola değiştirilmediUyarı: şifreniz %d gün içerisinde süresi dolacaktır.Uyarı: şifreniz %d gün içerisinde süresi dolacaktır.Uyarı: Parolanız %d gün içinde geçerliliğini yitirecekYeni hesabınıza hoş geldinizFarklı bir rol ya da seviye girmek ister misiniz?Parolanızı en kısa sürede değiştirmeniz gerekiyor (parola eski)Parolanızı en kısa sürede değiştirmeniz gerekiyor (yönetici baskıs)%s dizininde iletiniz var.İletiniz var.%s dizininde yeni iletiniz var.Yeni iletiniz var.%s dizininde iletiniz yok.%s dizininde eski/okunmuş iletiniz var.Eski/okunmuş iletiniz var.Daha uzun bir parola girmelisinizParolanızı değiştirmek için daha sonra denemelisinizHesabınızın süresi doldu; lütfen sistem yöneticinizle bağlantıya geçinsadece büyük-küçük harf değişimikullanıcı adını bir biçimde içeriyorçok uzun tekdüze karakter sırası içeriyoraynı karakterleri arka arkaya içeriyorhatalı etkileşim (%d) PAM başlatılamadı pam_set_item() çalıştırılamadı bir palindrom (iki yönden aynı şekilde okunuyor)değiştirilmişeskisi ile aynıeskisine çok benziyorçok basitseviye:giriş:giriş: çatallama yapılamadı: %mbellek ayırma hatasıyetersiz karakter sınıfırol:Linux-PAM-1.1.8/po/vi.po0000644000000000000000000004470212216527620011530 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # , 2012. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-11-30 11:03+0000\n" "Last-Translator: mattheu_9x \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/fedora/" "language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Thời gian đang dần hết...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Xin lỗi, đã hết thời gian!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "hội thoại sai (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Mật khẩu : " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Mật khẩu %s%s mới: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Nhập lại mật khẩu %s%s mới: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Xin lỗi, mật khẩu không khớp." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Nhập lại %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Hủy bỏ việc thay đổi mật khẩu." #: libpam/pam_item.c:311 msgid "login:" msgstr "Đăng nhập:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Thành công" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Lỗi nghiêm trọng - hủy bỏ ngay" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Không thể nạp mô-đun" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Không tìm thấy biểu tượng" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Lỗi trong mô-đun dịch vụ" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Lỗi hệ thống" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Lỗi bộ nhớ đệm" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Không có đủ quyền thực hiện" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Xác thực thất bại" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Không đủ quyền uỷ nhiệm để truy cập dữ liệu xác thực" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Dịch vụ chứng thực không thể lấy các thông tin xác thực" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Người dùng chưa biết đến mô-đun xác thực tiềm ẩn" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Đã hết số lần thử lại tối đa cho dịch vụ" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Dấu hiệu xác thực không còn hiệu lực; yêu cầu dấu hiệu xác thực mới" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Tài khoản người dùng đã hết hiệu lực" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Không thể thực hiện hoặc loại bỏ một mục nhập cho phiên định" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Dịch vụ chứng thực không thể lấy các chứng chỉ người dùng" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Hết hạn ủy nhiệm người dùng" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Cài đặt ủy nhiệm người dùng thất bại" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Hiện tại không có mô-đun dữ liệu" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Tình trạng hàng được thông qua để pam_ * _item ()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Lỗi giao tiếp" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Thao tác xác thực token lỗi" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Xác thực thông tin không thể được phục hồi" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "authentication token lock busy" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "xác thực token già tàn tật" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Không thành công sơ bộ kiểm tra bằng mật khẩu dịch vụ" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Giá trị trả về phải được bỏ qua bởi PAM công văn" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "chưa biết mô-đun" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Hết hạn xác thực" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Giao tiếp đang chờ kết quả" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Ứng dụng cần gọi libpam lần nữa" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Không biết lỗi PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "là giống như cũ" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "Lỗi cấp phát bộ nhớ" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "là một xâu palindrome" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "chỉ thay đổi chữ thường/hoa" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "quá giống cái cũ" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "quá đơn giản" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "được sử dụng lại" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "không đủ các lớp nhân vật" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "chứa quá nhiều kí tự giống nhau liên tiếp" #: modules/pam_cracklib/pam_cracklib.c:664 #, fuzzy msgid "contains too long of a monotonic character sequence" msgstr "chứa quá nhiều kí tự giống nhau liên tiếp" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "chứa tên user trong một số biểu mẫu" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Không có mật khẩu được cung cấp" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Chưa thay đổi mật khẩu" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "Mật khẩu không an toàn: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s thất bại: lối ra mã %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s thất bại: bắt tín hiệu %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s thất bại: không rõ tình trạng 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " từ %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " trên %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Lần đăng nhập:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Chào mừng bạn đến tài khoản mới của bạn!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Lần đăng nhập thất bại trước:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Đã có %d lần đăng nhập thất bại kể từ lần đăng nhập thành công trước đó." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Có %d lần đăng nhập không thành công kể từ lần đăng nhập thành công trước." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Quá nhiều lần đăng nhập cho '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Không có thư." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Bạn có thư mới." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Bạn có thư cũ." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Bạn có thư." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Bạn không có thư trong thư mục %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Bạn có thư mới trong thư mục %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Bạn có thư cũ trong thư mục %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Bạn có thư trong thư mục %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Tạo thư mục '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Không thể khởi tạo thư mục '%s'." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Mật khẩu đã được dùng. Hãy chọn mật khẩu khác." #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "Mật khẩu đã được dùng. Hãy chọn mật khẩu khác." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Bối cảnh an ninh mặc định %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Bạn có muốn nhập một vai trò khác nhau hoặc cấp?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "Vai trò:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Không có loại mặc định cho vai trò %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "trình độ:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Không phải là một bối cảnh an ninh hợp lệ" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Không thể có được bối cảnh hợp lệ cho %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Bối cảnh an ninh %s Giao" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Sáng tạo Context phím %s Giao" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "không thể khởi tạo PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "không pam_set_item ()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "đăng nhập: thất bại forking: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Thay đổi mật khẩu căng thẳng cho %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Nhập mật khẩu căng thẳng mới: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Nhập lại mật khẩu mới căng thẳng: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Mã xác nhận mis-đánh máy; mật khẩu không thay đổi" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Tài khoản tạm thời bị khóa (%ld giây còn lại)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Tài khoản bị khóa do đăng nhập %u không thành công" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Xác thực lỗi" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Lỗi dịch vụ" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Người dùng không rõ" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Lỗi không rõ" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Xấu số cho --cài lại=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Được thừa nhận lựa chọn%s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [- tập bắt rễ-filename] [- người sử dụng tên người dùng] [- đặt lại [= " "n]] [- yên tĩnh]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Không thể thiết lập lại tất cả các người dùng khác không\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Đang nhập Thất bại Thất bại cuốie Từ \n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Được phép truy cập (lần truy cập trước %ld giây trước)" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "Tài khoản của bạn đã hết hạn dùng: hãy liên lạc với nhà quản trị hệ thống" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Bạn phải thay đổi ngay mật khẩu (người chủ ép buộc)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Bạn phải thay đổi ngay mật khẩu (mật khẩu quá cũ)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Cảnh báo: mật khẩu của bạn sẽ hết hạn trong %d ngày" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Cảnh báo: mật khẩu của bạn sẽ hết hạn trong %d ngày" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS mật khẩu không thể được thay đổi." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Bạn phải chọn mật khẩu dài hơn" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Thay đổi mật khẩu cho %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "hiện hành UNIX mật khẩu: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Bạn phải đợi thêm nữa, để thay đổi mật khẩu" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Nhập mật khẩu UNIX mới: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Nhập lại mật khẩu UNIX mới: " #~ msgid "Would you like to enter a security context? [N] " #~ msgstr "Bạn có muốn nhập một bối cảnh an ninh? [N] " Linux-PAM-1.1.8/po/nl.gmo0000644000000000000000000002704112216527620011664 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %  %9$W'|7PI <%3b6) 1>MG3 ;' -c +  ) A )?!"i!!$!!(!!""'"J"j"8""@";#:O###%##0#$6$)I$s$$ $'$$ $%9%:Y%% %%%%"%"&!B& d&'p&&& &5&&M'#'+(6-(d(w(((*(;(9)oY)8)*3 *DT*I*** +++A+_+}+#+2+K+-4,-b,&,-,,!-"-=- O-]-w----1--..,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-07-10 13:21+0000 Last-Translator: hamaryns Language-Team: Dutch (http://www.transifex.com/projects/p/fedora/language/nl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nl Plural-Forms: nplurals=2; plural=(n != 1); %a %e %b %H:%M:%S %Z %Y van %.*s op %.*s%s is mislukt: signaal %d%s ontvangen%s is mislukt: afsluitcode %d%s is mislukt: onbekende status 0x%x%s: Onjuist getal gegeven aan --reset= %s: kan niet alle gebruikers terugzetten naar non-zero %s: Niet-herkende optie %s %s [--file rooted-bestandsnaam] [--user gebruikersnaam] [--reset[=n]] [--quiet] %s: [-f rooted-bestandsnaam] [--file rooted-bestandsnaam] [-u gebruikersnaam] [--user gebruikersnaam] [-r] [--reset[=n]] [--quiet] (huidig) UNIX-wachtwoord:…Sorry, uw tijd is verlopen! …De tijd raakt op… Toegang verleend (laatste toegang was %ld seconden geleden).Account vergrendeld wegens %u mislukte aanmeldingenAccount tijdelijk vergrendeld (%ld seconden resterend)Toepassing moet libpam nogmaals aanroepenAuthenticatiefoutAuthenticatiefoutAuthenticatie-informatie kan niet worden hersteldAuthenticatieservice kan geen authenticatie-informatie ophalenAuthenticatieservice kan geen legitimatiegegevens van gebruiker ophalenVeroudering van authenticatietoken is uitgeschakeldAuthenticatietoken is verlopenAuthenticatietoken is niet langer geldig; nieuwe is vereistVergrendeling van authenticatietoken is bezigFout bij manipulatie van authenticatietokenSLECHT WACHTWOORD: %sOnjuist item doorgegeven aan pam_*_item()Kan een ingang niet aanmaken/verwijderen voor de opgegeven sessieVeranderen van STRESS-wachtwoord voor %s.Veranderen van wachtwoord voor %s.ConversatiefoutConversatie wacht op een gebeurtenisAanmaken van map ‘%s’.Kritieke fout ­– onmiddellijk gestoptStandaard beveiligingscontext %s Nieuw STRESS-wachtwoord invoeren: Nieuw UNIX-wachtwoord invoeren:Fout in servicemoduleVoorlopige controle door de wachtwoordservice is misluktLaden van module misluktFout tijdens het instellen van legitimatiegegevens van gebruikerMaximum aantal herhaalde pogingen voor service overschredenOnvoldoende legitimatie voor toegang tot authenticatiedataSleutelaanmaakcontext %s toegewezenLaatste mislukte aanmeldpoging:%s%s%sLaatste aanmelding:%s%s%sAanmelding Mislukte Laatst mislukte Van Fout in geheugenbufferModule is onbekendNIS-wachtwoord kon niet worden gewijzigd.Nieuw %s%swachtwoord:Geen standaardtype voor rol %s Geen e-mail.Geen modulespecifieke gegevens aanwezigGeen wachtwoord opgegevenGeen geldige beveiligingscontextWachtwoord wijzigen afgebroken.Wachtwoord is al eens gebruikt.Wachtwoord is al eens gebruikt. Kies een ander wachtwoord.Wachtwoord is ongewijzigdWachtwoord:Toegang geweigerdVoer %s opnieuw inNieuw %s%swachtwoord herhalen: Nieuw STRESS-wachtwoord herhalen: Nieuw UNIX-wachtwoord herhalen:Beveiligingscontext %s toegewezenServicefoutSorry, wachtwoorden komen niet overeen.SuccesSymbool niet gevondenSysteemfoutPAM-dispatch dient de teruggegeven waarde te negeren Er was %d mislukte aanmeldpoging sinds de laatste succesvolle aanmelding.Er waren %d mislukte aanmeldpogingen sinds de laatste succesvolle aanmelding.Er waren %d mislukte aanmeldpogingen sinds de laatste succesvolle aanmelding.Te veel aanmeldingen voor ‘%s’.Niet in staat om map ‘%s’ aan te maken.Niet in staat om geldige context voor %s te verkrijgenOnbekende PAM-foutOnbekende foutOnbekende gebruikerGebruikersaccount is verlopenLegitimatiegegevens van gebruiker verlopenGebruiker onbekend bij de onderliggende authenticatiemoduleVerificatie onjuist getypt; wachtwoord blijft ongewijzigdWaarschuwing: uw wachtwoord zal binnen %d dag verlopenWaarschuwing: uw wachtwoord zal binnen %d dagen verlopenWaarschuwing: uw wachtwoord zal binnen %d dagen verlopenWelkom bij uw nieuwe account!Wilt u een andere rol of een ander niveau invoeren?U moet onmiddellijk uw wachtwoord wijzigen (wachtwoord is verouderd)U moet onmiddellijk uw wachtwoord wijzigen (op last van systeembeheerder)U hebt e-mail in map %s.U hebt e-mail.U hebt nieuwe e-mail in map %s.U hebt nieuwe e-mail.U hebt geen e-mail in map %s.U hebt oude e-mail in map %s.U hebt oude e-mail.U moet een langer wachtwoord kiezenU moet langer wachten om uw wachtwoord te wijzigenUw account is verlopen; neem alstublieft contact op met uw systeembeheerderalleen veranderingen in hoofd-/kleine lettersbevat de gebruikersnaam in een of andere vormbevat een te lange monotone tekenreeksbevat teveel dezelfde opeenvolgende karaktersfoutieve conversatie (%d) initialiseren van PAM is mislukt pam_set_item() is mislukt is een palindroomis omgedraaidis hetzelfde als het oudelijkt te veel op het oudeis te eenvoudigniveau:gebruikersnaam:aanmelding: beginnen van nieuw proces mislukt: %mgeheugentoekenningsfoutonvoldoende tekensoortenrol:Linux-PAM-1.1.8/po/et.gmo0000644000000000000000000000653112216527620011664 00000000000000*l;&?Yo/  /=\d u  Z-#Qm!B1N ^i w        8 H X +t        3 B V d v U *  ) E b  F    % = M S  (!"#%' *  )$ &(current) UNIX password: ...Sorry, your time is up! ...Time is running out... Authentication errorAuthentication failureCreating directory '%s'.Enter new UNIX password: Failed to load moduleModule is unknownNew %s%spassword: Password change aborted.Password has been already used. Choose another.Password: Permission deniedRetype new %s%spassword: Retype new UNIX password: Service errorSorry, passwords do not match.SuccessSymbol not foundSystem errorUnknown PAM errorUnknown errorUnknown userUser account has expiredWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysYou have mail in folder %s.You have new mail in folder %s.You have no mail in folder %s.You have old mail in folder %s.You must choose a longer passwordYour account has expired; please contact your system administratorerroneous conversation (%d) is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:role:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-12-02 11:25+0000 Last-Translator: mihkel Language-Team: Estonian (http://www.transifex.com/projects/p/fedora/language/et/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: et Plural-Forms: nplurals=2; plural=(n != 1); (praegune) UNIX-i parool....Kahjuks on su aeg otsas! ...Aeg hakkab otsa saama... Autentimise vigaAutentimine nurjusloon kataloogi '%s'.Sisesta uus UNIX-i parool:Mooduli laadimine nurjusTundmatu moodulUus %s%sparool:Paroolivahetus katkestatud.Parooli on juba kasutatud. Vali uus parool.Parool:Juurepääs keelatudKinnita uus %s%sparool:Kinnita uus UNIX-i parool:Teenuse vigaKahjuks paroolid ei klapi.EdukasSümbolit ei leitudSüsteemi vigaTundmatu PAM-i vigaTundmatu vigaTundmatu kasutajaKasutajakonto on aegunudHoiatus: su parool aegub %d päeva pärastHoiatus: su parool aegub %d päeva pärastHoiatus: su parool aegub %d päeva pärastSul on poste kaustas %s.Sul on uus post kaustas %s.Sul ei ole posti kaustas %s.Sul on vanu poste kaustas %s.Sa pead valima pikema parooliSu konto on aegunud; palun kontakteeru oma süsteemiadministraatoriga.vigane vestlus (%d) on palindroomon roteeruvon sama kui vanaon liiga sarnane vanaleon liiga lihtnetase:roll:Linux-PAM-1.1.8/po/da.po0000644000000000000000000004256712216527617011513 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Kris Thomsen , 2009,2012-2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-01-15 16:52+0000\n" "Last-Translator: Kris Thomsen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Tiden er ved at udløbe...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Din tid er desværre gået!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "konversationsfejl (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Adgangskode: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Ny %s%sadgangskode: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Genindtast ny %s%sadgangskode: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Adgangskoderne stemmer ikke overens." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Genindtast %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Ændring af adgangskode afbrudt." #: libpam/pam_item.c:311 msgid "login:" msgstr "logind:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Udført" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritisk fejl - afbryder omgående" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Kunne ikke indlæse modul" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbol ikke fundet" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Der opstod en fejl i tjenestemodul" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Systemfejl" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Fejl i hukommelsesbuffer" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Rettigheder nægtet" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Fejl ved godkendelse" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Utilstrækkelige oplysninger for at få adgang til godkendelsesdata" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Godkendelsestjenesten kan ikke hente godkendelsesoplysningerne" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Ukendt bruger for det underliggende godkendelsesmodul" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Antal forsøg på at få adgang til tjenesten er udløbet" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Godkendelses-token er ikke længere gyldig; en ny er påkrævet" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Brugerkontoen er udløbet" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Angivelsen til den angivne session kan ikke dannes/fjernes" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Godkendelsestjenesten kan ikke hente brugeroplysninger" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Brugeroplysningerne er udløbet" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Der opstod en fejl ved angivelse af brugeroplysninger" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Der findes ingen modulspecifikke data" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Ugyldigt objekt blev overført til pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Konversationsfejl" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Fejl ved manipulering af godkendelsestoken" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Godkendelsesoplysningerne kan ikke gendannes" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Lås til godkendelsestoken er optaget" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Udløb af godkendelsestoken er deaktiveret" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Indledende kontrol af adgangskodetjenesten mislykkedes" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Returværdien bør ignoreres af PAM-afsendelse" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Modul er ukendt" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Godkendelsestoken er udløbet" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Konversation venter på hændelse" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Programmet skal kalde libpam igen" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Ukendt PAM-fejl" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "er den samme som den gamle" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "fejl under hukommelsesallokering" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "det staves ens forfra og bagfra" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "kun forskel i store/små bogstaver" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ligner for meget den gamle" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "er for simpel" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "er roteret" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "ikke nok tegnklasser" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "indeholder for mange af de samme tegn" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "indeholder en for lang sekvens af monotone tegn" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "indeholder brugernavnet i en eller anden form" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Ingen adgangskode angivet" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Adgangskoden er uændret" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "DÅRLIG ADGANGSKODE: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s fejlede: afslutningskode %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s fejlede: fangede signal %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s fejlede: ukendt status 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " fra %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " på %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Sidste login:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Velkommen til din nye konto!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Sidste fejlende logind:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "Der var %d fejlende logindforsøg siden sidste succesfulde logind." msgstr[1] "Der var %d fejlende logindforsøg siden sidste succesfulde logind." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "Der var %d fejlende logindforsøg siden sidste succesfulde logind." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Der er for mange logind til \"%s\"." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Ingen e-post." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Du har ny e-post." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Du har gammel e-post." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Du har e-post." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Du har ingen e-post i mappe %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Du har ny e-post i mappe %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Du har gammel e-post i mappe %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Du har e-post i mappe %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Opretter mappe \"%s\"." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Kunne ikke oprette og initialisere mappe \"%s\"." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Adgangskoden er allerede blevet brugt. Vælg en anden." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Adgangskode er allerede i brug." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Standard sikkerhedskontekst %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Vil du angive en anden rolle eller niveau?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rolle:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Ingen standard type for rolle %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "niveau:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Ikke en gyldig sikkerhedskontekst" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Kunne ikke hente gyldig kontekst for %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Sikkerhedskontekst %s tildelt" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Nøgleoprettelseskontekst %s tildelt" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "kunne ikke initialisere PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() mislykkedes\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "logind: fejl ved forgrening: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Ændrer STRESS-adgangskode for %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Indtast ny STRESS-adgangskode: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Genindtast ny STRESS-adgangskode: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Bekræftelsen blev angivet forkert; adgangskode forbliver uændret" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Konto midlertidigt låst (%ld sekunder tilbage)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Konto låst på grund af %u fejlende logind" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Fejl ved godkendelse" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Fejl ved tjeneste" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Ukendt bruger" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Ukendt fejl" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Der er angivet et forkert tal til --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Ikke genkendt indstilling %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Alle brugere kunne ikke nulstilles til ikke-nul\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Logind Fejlende Sidste fejl Fra\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rodfilnavn] [--file rodfilnavn]\n" " [-u brugernavn] [--user brugernavn]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Adgang tildelt (sidste adgang var for %ld sekunder siden)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Din konto er udløbet; kontakt din systemadministrator" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Du skal omgående ændre din adgangskode (gennemtvunget af roden)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Du skal omgående ændre din adgangskode (for gammel adgangskode)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Advarsel: Din adgangskode udløber om %d dag" msgstr[1] "Advarsel: Din adgangskode udløber om %d dage" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Advarsel: din adgangskode udløber om %d dage" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS-adgangskoden kunne ikke ændres." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Du skal vælge en længere adgangskode" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Ændrer adgangskode for %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(nuværende) UNIX-adgangskode: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Du skal vente lidt længere for at ændre din adgangskode" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Indtast ny UNIX-adgangskode: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Genindtast ny UNIX-adgangskode: " Linux-PAM-1.1.8/po/sr.gmo0000644000000000000000000003443012216527620011677 00000000000000x( ) B M V t  ! &  G uX    1 &Q +x &   . :& 7a #  9 '3[l5 !2 Kl, 4;6p 1%9"Kn"/E Xc u # 42AtDA/["  6 *DZo-2DHD0Oo!,B#&/Jz  -4;Vsyq  3+527oj2u (T<}kNE\=2/ 1b b oy!Z!=D"n"V"ZH##K#] $-i$"$"$.$/ %;<%Fx%/%-%-&XK&2&M&U%'e{'C'9%(&_(O(0( )=()f)B))H)()*<R*6*N**+@+$Q+v+9+<+: ,>G,,@,,&,-W7-`-x.,i/F/M/#+0O0!o03070c0_a11R26 3QB3a3_3-V44644/48"5![55}5I5h53f6C6H6,'79T7H777" 83,8(`8 886818 9O'J%[(v:+D;Xx`1\uWwb"sG.qU EZp*F&jhA6k8 )Co?/39gH=^#,i5dt ]!RcT7r2Nle4 Lf-BP aS>m_0IMn$@KVQ Y< %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mnot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 12:00+0000 Last-Translator: Tomáš Mráz Language-Team: Serbian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sr Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2) %a %e. %b %H:%M:%S %Z %Y са %.*s на %.*s%s неуспех: ухваћен сигнал %d%s%s неуспех: излазни код %d%s неуспех: непознат статус 0x%x%s: задат је лош број за --reset= %s: не могу да повратим све кориснике на број различит од нуле %s: није препозната опција %s %s: [--file коренски-називдатотеке] [--user корисничкоиме] [--reset[=n]] [--quiet] %s: [- коренски-називдатотеке] [--file коренски-називдатотеке] [-u корисничкоиме] [--user корисничкоиме] [-r] [--reset[=n]] [--quiet] (тренутна) UNIX лозинка: ...Извините, време вам је истекло! ...Истиче време... Приступ је одобрен (последњи приступ је био пре %ld секунди).Налог је закључан због %u неуспелих пријаваНалог је привремено закључан (остало је %ld секунди)Програм мора поново да позове libpamГрешка при аутентификацијиНеуспешна аутентификацијаИнформације о аутентификацији не могу бити повраћенеУслуга аутентификације не може да добави информације аутентификацијеУслуга аутентификације не може да добави корисничка уверењаЗастаревање жетона аутентификације је искљученоИстекао је жетон аутентификацијеЖетон аутентификације више није исправан; неопходан је новиЗакључавање жетона аутентификације је заузетоГрешка при манипулацији жетоном аутентификацијеЛОША ЛОЗИНКА: %sЛош објекат је прослеђен pam_*_item() функцијиНе могу да направим/уклоним ставку наведене сесијеПромена STRESS лозинке за %s.Мењам лозинку за %s.Грешка у разговоруРазговор очекује догађајПравим директоријум „%s“.Критична грешка - прекидам одмахПодразумевани безбедносни контекст %s Унесите нову STRESS лозинку: Унесите нову UNIX лозинку: Грешка у услужном модулуНеуспешна прелиминарна провера услугом лозинкеНеуспешно учитавање модулаНеуспешно постављање корисничких уверењаИскоришћен је максимални број покушаја услугеНедовољно уверења за приступ подацима аутентификацијеКонтекст прављења кључа %s је додељенПоследња неуспешна пријава:%s%s%sПоследња пријава:%s%s%sПријава Неуспеси Последњи неуспех Са Грешка меморијског бафераМодул је непознатNIS лозинка не може бити промењена.Нова %s%sлозинка: Нема подразумеване врсте за улогу %s Немате пошту.Нису присутни специфични подаци модулаНије понуђена лозинкаНеисправан безбедносни контекстПромена лозинке је прекинута.Лозинка је већ у употреби. Изаберите другу.Лозинка није промењенаЛозинка: Дозвола је одбијенаПоново унесите %sПоново унесите нову %s%sлозинку: Поново унесите нову STRESS лозинку: Поново унесите нову UNIX лозинку: Безбедносни контекст %s је додељенГрешка услугеИзвините, лозинке се не подударају.УспешноСимбол није пронађенСистемска грешкаPAM диспечер треба да игнорише повратну вредностБио је %d неуспео покушај пријаве од последње успешне пријаве.Било је %d неуспела покушаја пријаве од последње успешне пријаве.Било је %d неуспелих покушаја пријаве од последње успешне пријаве.Било је %d неуспелих покушаја пријаве од последње успешне пријаве.Превише пријава за „%s“.Не могу да направим директоријум „%s“.Не могу да прибавим исправан контекст за %sНепозната PAM грешкаНепозната грешкаНепознат корисникКориснички налог је истекаоКорисничка уверења су истеклаКорисник није познат основном модулу аутентификацијеПотврда је погрешно укуцана; лозинка није промењенаУпозорење: ваша лозинка ће истећи кроз %d данУпозорење: ваша лозинка ће истећи кроз %d данаУпозорење: ваша лозинка ће истећи кроз %d данаУпозорење: ваша лозинка ће истећи кроз %d данаДобро дошли на ваш нови налог!Да ли желите да унесете другу улогу или ниво?Морате одмах да промените вашу лозинку (застарела је)Морате одмах да промените вашу лозинку (наметнуо root)Имате пошту у фасцикли %s.Имате пошту.Имате нову пошту у фасцикли %s.Имате нову пошту.Немате пошту у фасцикли %s.Имате стару пошту у фасцикли %s.Имате стару пошту.Морате изабрати дужу лозинкуМорате дуже сачекати на промену лозинкеВаш налог је истекао; обратите се администратору системасамо промене величине словасадржи корисничко име у неком обликусадржи превише истих знакова узастопноразговор пун грешака (%d) неуспешна иницијализација PAM-а неуспешно извршавање функције pam_set_item() палиндром јеизокренута јеиста је као и старасувише је слична претходнојсувише је једноставнаниво:пријава:пријава: грешка при гранању: %mнема довољно класа знаковаулога:Linux-PAM-1.1.8/po/bs.gmo0000644000000000000000000000107312216527620011654 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Bosnian (http://www.transifex.com/projects/p/fedora/language/bs/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bs Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Linux-PAM-1.1.8/po/fr.po0000644000000000000000000004473612216527617011536 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # mrtomlinux , 2008 # Charles-Antoine Couret , 2009 # Jérôme Fenal , 2013 # Kévin Raymond , 2012 # myriam malga , 2007 # Martin-Gomez Pablo , 2008 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-01-12 17:52+0000\n" "Last-Translator: Jérôme Fenal \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Temps bientôt écoulé...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Votre temps est épuisé !\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "conversation erronnée (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Mot de passe : " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nouveau %s%smot de passe : " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Retapez le nouveau %s%smot de passe : " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Les mots de passe ne correspondent pas." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Retapez %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Changement du mot de passe avorté." #: libpam/pam_item.c:311 msgid "login:" msgstr "login : " #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Succès" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Erreur critique - abandon immédiat" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Échec de chargement du module" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbole non trouvé" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Erreur dans le module de service" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Erreur système" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Erreur du tampon mémoire" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Autorisation refusée" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Échec d'authentification" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" "Informations d'identification insuffisantes pour accéder aux données " "d'authentification" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" "Le service d'authentification n'a pas pu récupérer les informations " "d'authentification" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Utilisateur inconnu par le module d'authentification sous-jacent" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Nombre maximum de tentatives épuisées pour le service" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" "Le jeton d'authentification n'est plus valide ; un nouveau jeton est requis" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Le compte de l'utilisateur a expiré" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Impossible de créer/supprimer une entrée pour la session spécifiée" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "Le service d'authentification n'a pas pu récupérer les informations " "d'identification de l'utilisateur" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Informations d'identification de l'utilisateur expirées" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" "Échec lors de la définition des informations d'identification de " "l'utilisateur" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Aucune donnée spécifique au module présente" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Élément incorrect transmis à pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Erreur de conversation" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Erreur de manipulation du jeton d'authentification" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Impossible de récupérer les informations d'authentification" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Jeton d'authentification occupé" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Péremption du jeton d'authentification désactivée" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Échec du contrôle préliminaire par le service de mot de passe" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "La valeur retournée devrait être ignorée par la répartition PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Module inconnu" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Le jeton d'authentification a expiré" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Conversation en attente d'événement" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "L'application doit appeler à nouveau libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Erreur PAM inconnue" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "est identique à l'ancien" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "erreur d'allocation de mémoire" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "est un palindrome" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "changement de casse uniquement" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ressemble trop à l'ancien" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "est trop simple" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "est inversé" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "les caractères utilisés ne sont pas suffisamment variés" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "contient trop de caractères consécutifs identiques" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "contient trop de caractères consécutifs identiques" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "contient le nom d'utilisateur d'une certaine manière" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Aucun mot de passe fourni" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Mot de passe inchangé" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "MOT DE PASSE INCORRECT : %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s échec : code de sortie %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s échec : signal capté %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s échec : statut 0x inconnu%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %A %e %B %Y à %H:%M:%S %Z" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " de %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " sur %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Dernière connexion :%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Bienvenue sur votre nouveau compte !" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Dernière connexion échoué : %s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Il y a %d tentative échouée de connexion depuis la dernière connexion " "réussie." msgstr[1] "" "Il y a %d tentatives échouées de connexion depuis la dernière connexion " "réussie." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Il y a eu %d tentatives de connexion échouées depuis la dernière connexion " "réussie." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Trop de connexions pour « %s »." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Aucun message." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Vous avez un nouveau message." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Vous avez un ancien message." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Vous avez des messages." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Vous n'avez aucun message dans le dossier %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Vous avez un nouveau message dans le dossier %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Vous avez un ancien message dans le dossier %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Vous avez des messages dans le dossier %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Création du répertoire « %s »." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Impossible de créer et d'initialiser le répertoire « %s »." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Mot de passe déjà utilisé. Choisissez-en un autre." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Mot de passe déjà utilisé." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Contexte de sécurité par défaut %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Voulez-vous entrer un niveau ou un rôle différent ?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rôle :" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Aucun type par défaut pour le rôle %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "niveau :" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Contexte de sécurité invalide" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Impossible d'obtenir un contexte valide pour %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Contexte de sécurité %s attribué" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Contexte de création de clés %s attribué" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "échec de l'initialisation de PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "échec de pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login : échec d'autoclônage : %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Changement du mot de passe STRESS pour %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Entrer le nouveau mot de passe STRESS : " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Retaper le nouveau mot de passe STRESS : " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Vérification erronée : mot de passe inchangé" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Compte temporairement verrouillé (%ld secondes restantes)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Compte temporairement verrouillé dû à l'échec de %u connexions" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Erreur d'authentification" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Erreur de service" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Utilisateur inconnu" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Erreur inconnue" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Numéro incorrect attribué à --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s : Option non reconnue %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file chemin du fichier] [--user nom d'utilisateur] [--reset[=n]] [--" "quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Impossible de réinitialiser tous les utilisateurs à non-zéro\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Connexion Échecs Dernier échec De\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f chemin du fichier] [--file chemin du fichier]\n" " [-u nom d'utilisateur] [--user nom d'utilisateur]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Accès accordé (dernier accès il y a %ld secondes)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Votre compte a expiré. Contactez votre administrateur système" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Vous devez changer votre mot de passe immédiatement (imposé par root)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Vous devez changer votre mot de passe immédiatement, il est périmé" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Avertissement : votre mot de passe expire dans %d jour." msgstr[1] "Avertissement : votre mot de passe expire dans %d jours" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Avertissement : votre mot de passe expire dans %d jours" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Le mot de passe NIS n'a pas pu être changé." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Vous devez choisir un mot de passe plus long" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Changement du mot de passe pour %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "Mot de passe UNIX (actuel) : " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Vous devez encore attendre avant de changer votre mot de passe" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Entrez le nouveau mot de passe UNIX : " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Retapez le nouveau mot de passe UNIX : " Linux-PAM-1.1.8/po/en_GB.gmo0000644000000000000000000000101012216527620012211 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/fedora/language/en_GB/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: en_GB Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/LINGUAS0000644000000000000000000000036112160065211011557 00000000000000ar as ast bal bg bn bn_IN br bs ca cs da de el en_GB es et eu fa fi fr ga gl gu he hi hu ia id it ja ka kk km kn ko ks lt lv mai ml mr ms nb nds nl nn or pa pl pt pt_BR ro ru si sk sq sr sr@latin sv ta te tg tr uk ur vi zh_CN zh_HK zh_TW zu Linux-PAM-1.1.8/po/nl.po0000644000000000000000000004376312216527620011531 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Geert Warrink , 2010,2012 # hamaryns , 2013 # Peter van Egdom , 2008 # Reinout van Schouwen , 2013 # Richard E. van der Luit , 2009 # R.F. Pels , 2005 # Rinse de Vries , 2005-2006 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-07-10 13:21+0000\n" "Last-Translator: hamaryns \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/fedora/language/" "nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "…De tijd raakt op…\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "…Sorry, uw tijd is verlopen!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "foutieve conversatie (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Wachtwoord:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nieuw %s%swachtwoord:" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Nieuw %s%swachtwoord herhalen: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Sorry, wachtwoorden komen niet overeen." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Voer %s opnieuw in" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Wachtwoord wijzigen afgebroken." #: libpam/pam_item.c:311 msgid "login:" msgstr "gebruikersnaam:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Succes" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritieke fout ­– onmiddellijk gestopt" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Laden van module mislukt" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbool niet gevonden" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Fout in servicemodule" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Systeemfout" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Fout in geheugenbuffer" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Toegang geweigerd" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Authenticatiefout" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Onvoldoende legitimatie voor toegang tot authenticatiedata" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Authenticatieservice kan geen authenticatie-informatie ophalen" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Gebruiker onbekend bij de onderliggende authenticatiemodule" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Maximum aantal herhaalde pogingen voor service overschreden" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Authenticatietoken is niet langer geldig; nieuwe is vereist" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Gebruikersaccount is verlopen" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Kan een ingang niet aanmaken/verwijderen voor de opgegeven sessie" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "Authenticatieservice kan geen legitimatiegegevens van gebruiker ophalen" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Legitimatiegegevens van gebruiker verlopen" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Fout tijdens het instellen van legitimatiegegevens van gebruiker" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Geen modulespecifieke gegevens aanwezig" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Onjuist item doorgegeven aan pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Conversatiefout" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Fout bij manipulatie van authenticatietoken" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Authenticatie-informatie kan niet worden hersteld" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Vergrendeling van authenticatietoken is bezig" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Veroudering van authenticatietoken is uitgeschakeld" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Voorlopige controle door de wachtwoordservice is mislukt" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "PAM-dispatch dient de teruggegeven waarde te negeren " #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Module is onbekend" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Authenticatietoken is verlopen" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Conversatie wacht op een gebeurtenis" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Toepassing moet libpam nogmaals aanroepen" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Onbekende PAM-fout" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "is hetzelfde als het oude" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "geheugentoekenningsfout" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "is een palindroom" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "alleen veranderingen in hoofd-/kleine letters" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "lijkt te veel op het oude" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "is te eenvoudig" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "is omgedraaid" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "onvoldoende tekensoorten" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "bevat teveel dezelfde opeenvolgende karakters" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "bevat een te lange monotone tekenreeks" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "bevat de gebruikersnaam in een of andere vorm" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Geen wachtwoord opgegeven" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Wachtwoord is ongewijzigd" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "SLECHT WACHTWOORD: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s is mislukt: afsluitcode %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s is mislukt: signaal %d%s ontvangen" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s is mislukt: onbekende status 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %e %b %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " van %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " op %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Laatste aanmelding:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Welkom bij uw nieuwe account!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Laatste mislukte aanmeldpoging:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Er was %d mislukte aanmeldpoging sinds de laatste succesvolle aanmelding." msgstr[1] "" "Er waren %d mislukte aanmeldpogingen sinds de laatste succesvolle aanmelding." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Er waren %d mislukte aanmeldpogingen sinds de laatste succesvolle aanmelding." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Te veel aanmeldingen voor ‘%s’." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Geen e-mail." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "U hebt nieuwe e-mail." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "U hebt oude e-mail." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "U hebt e-mail." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "U hebt geen e-mail in map %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "U hebt nieuwe e-mail in map %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "U hebt oude e-mail in map %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "U hebt e-mail in map %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Aanmaken van map ‘%s’." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Niet in staat om map ‘%s’ aan te maken." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Wachtwoord is al eens gebruikt. Kies een ander wachtwoord." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Wachtwoord is al eens gebruikt." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Standaard beveiligingscontext %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Wilt u een andere rol of een ander niveau invoeren?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rol:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Geen standaardtype voor rol %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "niveau:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Geen geldige beveiligingscontext" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Niet in staat om geldige context voor %s te verkrijgen" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Beveiligingscontext %s toegewezen" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Sleutelaanmaakcontext %s toegewezen" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "initialiseren van PAM is mislukt\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() is mislukt\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "aanmelding: beginnen van nieuw proces mislukt: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Veranderen van STRESS-wachtwoord voor %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Nieuw STRESS-wachtwoord invoeren: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Nieuw STRESS-wachtwoord herhalen: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Verificatie onjuist getypt; wachtwoord blijft ongewijzigd" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Account tijdelijk vergrendeld (%ld seconden resterend)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Account vergrendeld wegens %u mislukte aanmeldingen" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Authenticatiefout" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Servicefout" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Onbekende gebruiker" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Onbekende fout" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Onjuist getal gegeven aan --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Niet-herkende optie %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s [--file rooted-bestandsnaam] [--user gebruikersnaam] [--reset[=n]] [--" "quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: kan niet alle gebruikers terugzetten naar non-zero\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Aanmelding Mislukte Laatst mislukte Van\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-bestandsnaam] [--file rooted-bestandsnaam]\n" " [-u gebruikersnaam] [--user gebruikersnaam]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Toegang verleend (laatste toegang was %ld seconden geleden)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "Uw account is verlopen; neem alstublieft contact op met uw systeembeheerder" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" "U moet onmiddellijk uw wachtwoord wijzigen (op last van systeembeheerder)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "U moet onmiddellijk uw wachtwoord wijzigen (wachtwoord is verouderd)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Waarschuwing: uw wachtwoord zal binnen %d dag verlopen" msgstr[1] "Waarschuwing: uw wachtwoord zal binnen %d dagen verlopen" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Waarschuwing: uw wachtwoord zal binnen %d dagen verlopen" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS-wachtwoord kon niet worden gewijzigd." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "U moet een langer wachtwoord kiezen" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Veranderen van wachtwoord voor %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(huidig) UNIX-wachtwoord:" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "U moet langer wachten om uw wachtwoord te wijzigen" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Nieuw UNIX-wachtwoord invoeren:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Nieuw UNIX-wachtwoord herhalen:" Linux-PAM-1.1.8/po/zh_CN.po0000644000000000000000000004137312216527620012114 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Christopher Meng , 2012 # Leah Liu , 2008-2009 # Tommy He , 2012 # Xi HUANG , 2007 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-12-24 06:31+0000\n" "Last-Translator: Christopher Meng \n" "Language-Team: Chinese (China) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...时间即将耗尽...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...对不起,您的时间已经耗尽!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "有错误的转换 (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "密码:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "新的 %s%s密码:" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "重新输入新的 %s%s密码:" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "抱歉,密码不匹配。" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "重新输入 %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "密码更改取消。" #: libpam/pam_item.c:311 msgid "login:" msgstr "登录:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "成功" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "严重错误 - 立即中止" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "装载模块失败" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "找不到符号" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "服务模块存在错误" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "系统错误" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "内存缓冲区错误" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "拒绝权限" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "鉴定故障" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "没有足够的身份凭证以访问鉴定数据" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "鉴定服务无法检索到鉴定信息" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "底层的鉴定模块无法识别用户" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "已经超出服务重试的最多次数" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "鉴定令牌不再有效;需要新的鉴定令牌" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "用户帐户已失效" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "无法为指定的会话创建/去除项。" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "鉴定服务无法检索到用户身份凭证" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "用户身份凭证失效" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "设置用户身份凭证时出现故障" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "不存在特定于模块的数据" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "传递至 pam_*_item() 的项目无效" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "转换错误" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "鉴定令牌操作错误" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "无法恢复鉴定信息" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "鉴定令牌锁忙碌" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "已禁用鉴定令牌过期处理" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "密码服务初步检查失败" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "返回值应该被 PAM dispatch 忽略" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "模块未知" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "鉴定令牌失效" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "转换正在等待事件" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "应用程序需要再次调用 libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "未知的 PAM 错误" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "与旧密码相同" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "内存分配错误" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "是回文" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "仅更改了大小写" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "与旧密码过于相似" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "过于简单" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "是旧密码的循环" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "没有足够的字符分类" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "包含过多连续相同的字符" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "包含过长的单一字符序列" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "以某些形式包含用户名" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "密码未提供" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "密码未更改" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "无效的密码: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s 失败:退出代码 %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s 失败:捕获的信号 %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s 失败:未知的状态 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "%a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "从 %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "%.*s 上" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "上一次登录:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "欢迎使用新帐户!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "最后一次失败的登录:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "最有一次成功登录后有 %d 次失败的登录尝试。" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "最有一次成功登录后有 %d 次失败的登录尝试。" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s'登录过多。" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "无邮件。" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "您有新邮件。" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "您有旧邮件。" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "您有邮件。" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "您在文件夹 %s 中无邮件。" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "您在文件夹 %s 中有新邮件。" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "您在文件夹 %s 中有旧邮件。" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "您在文件夹 %s 中有邮件。" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "创建目录 '%s'。" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "无法创建和初始化目录 '%s'。" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "密码已使用。请选择其他密码。" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "密码已被使用。" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "默认安全性环境 %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "您是否愿意进入不同的角色或者级别?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "角色:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "没有角色 %s 默认类型\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "级别:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "不是有效的安全性环境" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "无法为 %s 获得有效环境" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "已指派安全性环境 %s" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "已分配密钥生成环境 %s" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "未能初始化 PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "未能 pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "登录:故障派生:%m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "为 %s 更改 STRESS 密码。" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "输入新的 STRESS 密码:" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "重新输入新的 STRESS 密码:" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "校验类型错误;密码未更改" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "帐户暂时锁住(还有 %ld 秒)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "因为 %u 失败登录而锁定帐户" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "鉴定错误" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "服务错误" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "未知的用户" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "未知的错误" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: 给定的数字无效 --重设置=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: 未识别的选项 %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "%s: [--文件 根文件名] [--用户 用户名] [--重设置[=n]] [--安静]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: 无法将所有用户重设置为非零\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Failures Latest failure From\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "可以访问(上次访问是 %ld 秒之前)。" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "您的帐户已失效;请与系统管理员取得联系" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "您需要立即更改密码(root 强制)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "您需要立即更改密码(密码过期)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "警告:您的密码将在 %d 天后过期" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "警告:您的密码将在 %d 天后过期" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "无法更改 NIS 密码。" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "必须选择更长的密码" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "为 %s 更改 STRESS 密码。" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(当前)UNIX 密码:" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "您必须等待更长时间以更改密码" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "输入新的 UNIX 密码:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "重新输入新的 UNIX 密码:" Linux-PAM-1.1.8/po/stamp-po0000644000000000000000000000001212216527621012220 00000000000000timestamp Linux-PAM-1.1.8/po/bg.po0000644000000000000000000005143212216527617011506 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Valentin Laskov , 2012-2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-08-09 14:31+0000\n" "Last-Translator: Valentin Laskov \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Времето изтича...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Съжаляваме, Вашето време изтече!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "погрешен разговор (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Парола: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Нова %s%sпарола: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Отново новата %s%sпарола: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Съжаляваме, паролите не съвпадат." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Напишете пак %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Промяната на паролата е прекратена." #: libpam/pam_item.c:311 msgid "login:" msgstr "влизане:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Успех" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Критична грешка - незабавно прекратяване" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Неуспех при зареждане на модул" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Не е намерен символ" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Грешка в обслужващ модул" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Системна грешка" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Грешка в буферна памет" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Позволението отказано" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Грешка при удостоверяване" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" "Недостатъчно данни за удостоверяване за достъп до удостоверителни данни" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Услугата за удостоверяване не можа да извлече данни за удостоверяване" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Непознат потребител за поддържащия удостоверяването модул" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Максималният брой опити за услугата беше изчерпан" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Удостоверителният токен вече не е валиден; необходим е нов" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Потребителският акаунт е изтекъл" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Не мога да създам/премахна запис за зададената сесия" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "Удостоверяващата услуга не може да извлече данните за удостоверяване на " "потребителя" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Данните за удостоверяване на потребителя са с изтекъл срок" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Неуспех при задаване данни за удостоверяване на потребител" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Липсват специфични за модула данни" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Грешен елемент, подаден към pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Грешка в диалога" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Грешка при манипулирането с удостоверителния токен" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Удостоверителната информация не може да бъде възстановена" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Заключването на удостоверителния токен е заето" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Следенето на възрастта на удостоверителния токен е забранено" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Предварителната проверка от услугата парола не успя" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Върнатата стойност трябва да бъде игнорирана от PAM dispatch" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Модулът е непознат" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Срокът на удостоверителния токен е изтекъл" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Диалогът чака събитие" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Приложението се нуждае от повторно извикване на libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Непозната PAM грешка" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "е същата като старата" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "грешка при заделяне на памет" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "е палиндром" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "променена е само големината на буквите" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "е твърде подобна на старата" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "е много лесна" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "е завъртяна" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "недостатъчно класове знаци" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "съдържа твърде много еднакви последователни знаци" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "съдържа твърде дълга еднообразна последователност знаци" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "под някаква форма съдържа името на потребителя" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Не е предоставена парола" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Паролата не е променена" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ЛОША ПАРОЛА: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s се провали: код на грешка %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s се провали: уловен сигнал %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s се провали: непознат статус 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " от %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " на %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Последно влизане:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Добре дошли в новия Ви акаунт!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Последно неуспешно влизане:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "След последното успешно влизане, имаше %d неуспешен опит за влизане." msgstr[1] "" "След последното успешно влизане, имаше %d неуспешни опита за влизане." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "След последното успешно влизане, имаше %d неуспешни опита за влизане." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Твърде много влизания за '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Няма писма." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Имате нови писма." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Имате стари писма." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Имате писма." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Нямате писма в папката %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Имате нови писма в папка %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Имате стари писма в папка %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Имате писма в папка %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Създаване на директория '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Не мога да създам и настроя директория '%s'." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Паролата вече е използвана. Изберете друга." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Паролата вече е използвана." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Подразбиращ се контекст за сигурност %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Искате ли да въведете различна роля или ниво?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "роля:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Няма подразбиращ се тип за роля %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "ниво:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Невалиден контекст за сигурност" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Не мога да получа валиден контекст за %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Зададен е контекст за сигурност %s" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Зададен е Key Creation Context %s" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM инициализацията не успя\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() не успя \n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "вход: неуспех при стартиране: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Смяна на STRESS паролата за %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Въведете нова STRESS парола: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Отново новата STRESS парола: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Проверка за погрешно написано; паролата непроменена" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Акаунтът е заключен временно (%ld остават секунди)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Акаунтът е заключен поради %u неуспешни опита за влизане" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Грешка при удостоверяването" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Грешка в услугата" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Непознат потребител" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Непозната грешка" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Грешно число, подадено на --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Неразпозната опция %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Не мога да установя всички потребители на non-zero\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Влязъл Неуспехи Последен неуспех От\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Достъпът е предоставен (последният достъп бе преди %ld секунди)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "Срокът на акаунта Ви е изтекъл; моля, свържете се с администратора на " "системата" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Изисква се веднага да смените паролата си (изискано от root)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Изисква се веднага да смените паролата си (срокът и изтича)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Внимание: срокът на паролата Ви изтича след %d ден" msgstr[1] "Внимание: срокът на паролата Ви изтича след %d дни" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Внимание: паролата Ви ще изтече след %d дни" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS парола не може да бъде променена." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Трябва да изберете по-дълга парола" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Смяна на паролата за %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(текуща) UNIX парола: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Трябва да изчакате повече, за да промените Вашата парола" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Въведете нова UNIX парола: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Отново новата UNIX парола: " Linux-PAM-1.1.8/po/ar.gmo0000644000000000000000000002274412216527620011662 00000000000000Z !&/GK&  .7 :f 7 #  9 T 's   5  ! 7 X t  , 4 6) ` r  "   "   /, \ o z      (0 A2N  6*1\DyD.Na!,BEWt   ,, F P1Zg#G%`'F+:AT|VA(>je8?H3Y1&N%u/,4H-1v_P+Y)/<#@CX(!l(T}576(LuCI;X1= dZ ] /!hM!i!# "D",W""*",""*#H?#s#3#0$N$g$9~$$@$Y%+p%%.%9;O63/)X %H!8K,ENG+4F*C V:<I'QMY$ LBSAT.?W Z>5&R U=712("0JDP-@# %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionConversation errorConversation is waiting for eventCritical error - immediate abortEnter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataLast login:%s%s%sMemory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword has been already used. Choose another.Password unchangedPassword: Permission deniedRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchToo many logins for '%s'.Unknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWelcome to your new account!You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelogin:login: failure forking: %mProject-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:57+0000 Last-Translator: Tomáš Mráz Language-Team: Arabic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ar Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5 %a %b %e %H:%M:%S %Z %Yمن %.*sفي %.*s%s: تم إعطاء رقم خطأ لـ --reset= %s: لا يمكن إعادة تعيين كافة المستخدمين إلى رقم غير الصفر %s: خيار غير معروف %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] كلمة سر UNIX (الحالية): ...عذرًا، انتهى الوقت! ...الوقت ينفد... يحتاج التطبيق إلى استدعاء libpam مرة أخرىخطأ في التصديقفشل التصديقلا يمكن استعادة معلومات التصديقتعذر على خدمة التصديق استرجاع معلومات التصديقلا يمكن لخدمة التصديق استرجاع صلاحيات المستخدمتم تعطيل تقادم الرمز المميز للتصديقانتهت صلاحية الرمز المميز للتصديقلم يعد الرمز المميز للتصديق صالحًا، مطلوب رمز مميز جديدقفل الرمز المميز للتصديق مشغولخطأ في معالجة الرمز المميز للتصديقكلمة سر سيئة: %sتم تمرير عنصر سيء إلى pam_*_item()لا يمكن إنشاء/إزالة إدخال بالنسبة للجلسة المحددةخطأ في المحادثةالمحادثة تنتظر الحدثخطأ جسيم - إيقاف فوريأدخل كلمة سر STRESS الجديدة: أدخل كلمة سر UNIX الجديدة: خطأ في الوحدة النمطية للخدمةفشل التحقق الأولي بواسطة خدمة كلمة السرفشل تعيين صلاحيات المستخدمتم استنفاذ الحد الأقصى للمحاولة بالنسبة لهذه الخدمةصلاحيات غير كافية للوصول إلى بيانات التصديقتسجيل الدخول الأخير:%s%s%sخطأ في الذاكرة الوسيطةالوحدة النمطية غير معروفةتعذر تغيير كلمة السر الخاصة بـ NIS.كلمة سر %s%s الجديدة: لا يوجد بريد.لا يوجد بيانات خاصة بالوحدات النمطيةلم يتم إدخال كلمة السرلا يصلح كسياق أمانكلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى.لم يتم تغيير كلمة السركلمة السر: الإذن مرفوضأعد كتابة كلمة سر %s%s الجديدة: أعد كتابة كلمة سر STRESS الجديدة: أعد كتابة كلمة سر UNIX الجديدة: تم تخصيص سياق الأمان %sخطأ في الخدمةعذرًا، يوجد عدم تطابق بين كلمات السر.نجاحالرمز غير موجودخطأ بالنظاميجب تجاهل القيمة الناتجة بواسطة إرسال PAMمرات تسجيل دخول كثيرة جدًا لـ '%s'.خطأ PAM غير معروفخطأ غير معروفمستخدم غير معروفانتهت صلاحية حساب المستخدمصلاحيات المستخدم منتهية الصلاحيةالمستخدم مجهول بالنسبة لوحدة التصديق النمطية الأساسيةإعادة كتابة كلمة السر غير صحيحة؛ كلمة السر لم تتغيرمرحبًا بك في حسابك الجديد!مطلوب منك تغيير كلمة السر على الفور (كلمة السر قديمة جدًا)مطلوب منك تغيير كلمة السر على الفور (مفروض بواسطة المسؤول)لديك بريد في مجلد %s.لديك بريد.لديك بريد جديد في مجلد %s.لديك بريد جديد.ليس لديك بريد في مجلد %s.لديك بريد قديم في مجلد %s.لديك بريد قديم.يجب اختيار كلمة سر أطوليجب الانتظار فترة أطول لتغيير كلمة السرانتهت مدة صلاحية الحساب الخاص بك؛ الرجاء الاتصال بمسؤول النظاملم يتم سوى تغيير حالة الأحرفمحادثة خاطئة (%d) فشلت تهيئة PAM فشل pam_set_item() كلمة سر يمكن قراءتها من الجهتينكلمة مرور ملتفةلا يوجد اختلاف عن كلمة السر القديمةكلمة السر الجديدة شديدة الشبه بكلمة السر القديمةكلمة السر شديدة البساطةتسجيل الدخول:تسجيل الدخول: فشل تشعيب: %mLinux-PAM-1.1.8/po/bg.gmo0000644000000000000000000003516312216527620011647 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %  636:j<Z+=Giu"'?J"rf Y_4A 0v l !!q3"O"k"Wa#_#$?3$`s$0$)%/%(N%2w%K%H%/?&-o&-&`&8,'me'\'0()(9(&)QB)))")@)"*=>*|*@*-*;+A<+2~+O++,-,)<,f,,,/,-,= - J-=k- -#--e-\.}V/3/L0GU0#00%0=1lE1m1` 22L5363R3k 4ix4'4 50!5R5-r525!5?5g566G.7Vv7i7]78'81889$9':92b99 99894:26: i:,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-08-09 14:31+0000 Last-Translator: Valentin Laskov Language-Team: Bulgarian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bg Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y от %.*s на %.*s%s се провали: уловен сигнал %d%s%s се провали: код на грешка %d%s се провали: непознат статус 0x%x%s: Грешно число, подадено на --reset= %s: Не мога да установя всички потребители на non-zero %s: Неразпозната опция %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (текуща) UNIX парола: ...Съжаляваме, Вашето време изтече! ...Времето изтича... Достъпът е предоставен (последният достъп бе преди %ld секунди).Акаунтът е заключен поради %u неуспешни опита за влизанеАкаунтът е заключен временно (%ld остават секунди)Приложението се нуждае от повторно извикване на libpamГрешка при удостоверяванетоГрешка при удостоверяванеУдостоверителната информация не може да бъде възстановенаУслугата за удостоверяване не можа да извлече данни за удостоверяванеУдостоверяващата услуга не може да извлече данните за удостоверяване на потребителяСледенето на възрастта на удостоверителния токен е забраненоСрокът на удостоверителния токен е изтекълУдостоверителният токен вече не е валиден; необходим е новЗаключването на удостоверителния токен е заетоГрешка при манипулирането с удостоверителния токенЛОША ПАРОЛА: %sГрешен елемент, подаден към pam_*_item()Не мога да създам/премахна запис за зададената сесияСмяна на STRESS паролата за %s.Смяна на паролата за %s.Грешка в диалогаДиалогът чака събитиеСъздаване на директория '%s'.Критична грешка - незабавно прекратяванеПодразбиращ се контекст за сигурност %s Въведете нова STRESS парола: Въведете нова UNIX парола: Грешка в обслужващ модулПредварителната проверка от услугата парола не успяНеуспех при зареждане на модулНеуспех при задаване данни за удостоверяване на потребителМаксималният брой опити за услугата беше изчерпанНедостатъчно данни за удостоверяване за достъп до удостоверителни данниЗададен е Key Creation Context %sПоследно неуспешно влизане:%s%s%sПоследно влизане:%s%s%sВлязъл Неуспехи Последен неуспех От Грешка в буферна паметМодулът е непознатNIS парола не може да бъде променена.Нова %s%sпарола: Няма подразбиращ се тип за роля %s Няма писма.Липсват специфични за модула данниНе е предоставена паролаНевалиден контекст за сигурностПромяната на паролата е прекратена.Паролата вече е използвана.Паролата вече е използвана. Изберете друга.Паролата не е промененаПарола: Позволението отказаноНапишете пак %sОтново новата %s%sпарола: Отново новата STRESS парола: Отново новата UNIX парола: Зададен е контекст за сигурност %sГрешка в услугатаСъжаляваме, паролите не съвпадат.УспехНе е намерен символСистемна грешкаВърнатата стойност трябва да бъде игнорирана от PAM dispatchСлед последното успешно влизане, имаше %d неуспешен опит за влизане.След последното успешно влизане, имаше %d неуспешни опита за влизане.След последното успешно влизане, имаше %d неуспешни опита за влизане.Твърде много влизания за '%s'.Не мога да създам и настроя директория '%s'.Не мога да получа валиден контекст за %sНепозната PAM грешкаНепозната грешкаНепознат потребителПотребителският акаунт е изтекълДанните за удостоверяване на потребителя са с изтекъл срокНепознат потребител за поддържащия удостоверяването модулПроверка за погрешно написано; паролата непромененаВнимание: срокът на паролата Ви изтича след %d денВнимание: срокът на паролата Ви изтича след %d дниВнимание: паролата Ви ще изтече след %d дниДобре дошли в новия Ви акаунт!Искате ли да въведете различна роля или ниво?Изисква се веднага да смените паролата си (срокът и изтича)Изисква се веднага да смените паролата си (изискано от root)Имате писма в папка %s.Имате писма.Имате нови писма в папка %s.Имате нови писма.Нямате писма в папката %s.Имате стари писма в папка %s.Имате стари писма.Трябва да изберете по-дълга паролаТрябва да изчакате повече, за да промените Вашата паролаСрокът на акаунта Ви е изтекъл; моля, свържете се с администратора на систематапроменена е само големината на буквитепод някаква форма съдържа името на потребителясъдържа твърде дълга еднообразна последователност знацисъдържа твърде много еднакви последователни знаципогрешен разговор (%d) PAM инициализацията не успя pam_set_item() не успя е палиндроме завъртянае същата като старатае твърде подобна на старатае много леснаниво:влизане:вход: неуспех при стартиране: %mгрешка при заделяне на паметнедостатъчно класове знацироля:Linux-PAM-1.1.8/po/boldquot.sed0000644000000000000000000000033112160065211013055 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g Linux-PAM-1.1.8/po/pt.po0000644000000000000000000004424112216527620011533 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Antonio Cardoso Martins , 2005-2006 # Ricardo Pinto , 2013 # Rui Gouveia , 2009 # Rui Gouveia , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-01-28 11:21+0000\n" "Last-Translator: Ricardo Pinto \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...O tempo está a esgotar-se...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Lamento, o seu tempo esgotou-se!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "conversação errónea (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Senha: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nova %s%ssenha: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Digite novamente a nova %s%ssenha: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Lamento, as senhas não coincidem." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Digite novamente %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Alteração da senha interrompida." #: libpam/pam_item.c:311 msgid "login:" msgstr "utilizador:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Sucesso" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Erro crítico - interrupção imediata" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Falhou o carregamento do modulo" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Símbolo não encontrado" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Erro no módulo do serviço" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Erro de sistema" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Erro de buffer de memória" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Permissão negada" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Falha de autenticação" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Credenciais insuficientes para aceder aos dados de autenticação" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "O serviço de autenticação não pode obter informação de autenticação" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Utilizador desconhecido para o módulo de autenticação subjacente" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Esgotou o número máximo de tentativas para o serviço" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "O 'token' de autenticação já não é válido; é necessário um novo" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "A conta de utilizador expirou" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Não é possível criar/remover uma entrada para a sessão especificada" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "O serviço de autenticação não consegue obter as credenciais do utilizador" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "As credenciais do utilizador expiraram" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Falha na definição das credenciais do utilizador" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Não existe informação do módulo" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Item incorrecto passado para pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Erro de conversação" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Erro de manipulação do 'token' de autenticação" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "A informação de autenticação não pode ser recuperada" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "O 'token' de autenticação encontra-se bloqueado" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "O envelhecimento do 'token' de autenticação está desactivado" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Falha na validação preliminar pelo serviço de senhas" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "O valor de retorno deve ser ignorado pelo PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "O módulo é desconhecido" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "O 'token' de autenticação expirou" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "A conversação está a aguardar um evento" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "A aplicação necessita de invocar o libpam novamente" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Erro PAM desconhecido" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "é igual à anterior" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "erro de alocação de memória" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "é um palíndromo" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "apenas muda a capitulação" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "é muito semelhante à anterior" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "é demasiado simples" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "é rodada" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "não tem classes de caracteres suficientes" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "contém demasiados caracteres iguais consecutivos" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "contém demasiados caracteres iguais consecutivos" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "contém, de alguma forma, o nome do utilizador" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Não foi fornecida uma senha" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Senha inalterada" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "MÁ SENHA: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s falhou: código de saída %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s falhou: sinal capturado %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s falhou: estado desconhecido 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " a partir de %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " em %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Último início de sessão:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Bem vindo à sua nova conta!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Último início de sessão falhado:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Houve %d tentativa falhada de início de sessão desde o último início de " "sessão com sucesso." msgstr[1] "" "Houve %d tentativas falhadas de início de sessão desde o último início de " "sessão com sucesso." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Houve %d tentativas falhadas de início de sessão desde o último início de " "sessão com sucesso." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Demasiados inícios de sessão para '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Não tem correio electrónico." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Tem correio electrónico novo." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Tem correio electrónico antigo." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Tem correio electrónico." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Não tem correio electrónico na pasta %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Tem correio electrónico novo na pasta %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Tem correio electrónico antigo na pasta %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Tem correio electrónico na pasta %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "A criar directório '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Não foi possível criar e inicializar o directório '%s'." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "A senha já foi utilizada anteriormente. Escolha outra." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "A senha já foi utilizada anteriormente." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Contexto de Segurança por Omissão %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Pretende inserir um perfil ou nível diferente?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "Perfil: " #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Perfil sem tipo definido por omissão %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "nível: " #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Não é um contexto de segurança válido" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Não foi possível obter um contexto de segurança válido para %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Contexto de Segurança %s Atribuído" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Contexto de Segurança de Chaves %s Atribuído" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "falha ao inicializar o PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "falha em pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "início de sessão: falha no 'forking': %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "A alterar a senha STRESS para %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Digite a nova senha STRESS: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Digite novamente a nova senha STRESS: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "A verificação não coincide; senha inalterada" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Conta temporariamente bloqueada (faltam %ld segundos)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Conta bloqueada devido a %u inícios de sessão falhados" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Erro de autenticação" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Erro de serviço" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Utilizador desconhecido" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Erro desconhecido" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Número errado fornecido a --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Opção não reconhecida %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file ficheiro-raiz] [--user nome-utilizador] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Não foi possível reiniciar todos os utilizadores para não zero\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Sessão Falhas Última falha De\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u nome-de-utilizador] [--user nome-de-utilizador]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Acesso permitido (último acesso foi à %ld segundos atrás)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "A sua conta expirou; por favor contacte o seu administrador de sistema" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "É obrigatório que altere de imediato a sua senha (politica do sistema)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" "É obrigatório que altere de imediato a sua senha (antiguidade da password)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Aviso: a sua senha expira em %d dia" msgstr[1] "Aviso: a sua senha expira em %d dias" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Aviso: a sua palavra passe expira em %d dias" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "A senha NIS não pode ser alterada." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Deve escolher uma senha mais longa" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "A alterar senha para %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "senha UNIX (actual): " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Tem de esperar mais antes de poder alterar a sua senha" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Digite a nova senha UNIX: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Digite novamente a nova senha UNIX: " Linux-PAM-1.1.8/po/id.gmo0000644000000000000000000001067312216527620011652 000000000000002C<HI.`:7#9&`'5 )Jd| 46"3Vs/  =E V/c"62 R a     3  ! ( .  - 3 4, "a =   ) 0) Z x #    )%+*Q| 8@ GTc*{#$ "=,`6&'&Ah"*-(# ) % / 0$,'2.1! + "&Authentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionConversation errorCreating directory '%s'.Critical error - immediate abortEnter new UNIX password: Error in service moduleFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataMemory buffer errorNo module specific data is presentNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password: Permission deniedRetype %sRetype new UNIX password: Sorry, passwords do not match.SuccessSymbol not foundSystem errorUnable to create and initialize directory '%s'.Unable to get valid context for %sUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleWould you like to enter a different role or level?You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.contains too long of a monotonic character sequencelevel:login:role:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-22 05:07+0000 Last-Translator: sentabi Language-Team: Indonesian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: id Plural-Forms: nplurals=1; plural=0; Otentikasi gagalInformasi otentikasi tidak dapat dikembalikanServis otentikasi tidak mendapatkan info otentikasiOtentikasi servis tidak mendapat kredential penggunaBatas token otentikasi tidak aktifToken otentikasi tidak valid, dibutuhkan otentikasi yang baruKunci otentikasi sedang sibukKesalahan di token otentikasi Kesalahan item diteruskan ke pam_*_item()Tidak dapat membuat/menghapus entri untuk sesionTerjadi kesalahan percakapan Membuat direktori '%s'.Kesalahan kritis - Langsung ditundaMasukkan sandi Unix yang baru :Kesalahan di servis modulGagal memuat modulGagal dalam mengkonfigurasi izin penggunaSudah melebihi batas percobaan servisTidak cukup hak akses untuk mengakses dataKesalahan buffer memoryTidak ada modul yang ditampilkanKonteks sekuriti tidak benar.Pergantian sandi digagalkan.Sandi sudah digunakan.Sandi sudah digunakan sebelumnya. Pilih sandi yang lain.Sandi:Izin ditolakKetik ulang %sKetik ulang sandi Unix:Maaf, sandi yang anda masukkan tidak sama.BerhasilSimbol tidak ditemukanKesalahan sistemTidak dapat membuat direktori '%s'.Tidak mendapat valid konten untuk %sAkun pengguna sudah berakhirKredential pengguna telah berakhirPengguna tidak dikenal oleh modul otentikasiApakah anda mau menambah izin atau level yang berbeda?Anda menerima surelAnda memiliki surel baru di folder %s.Anda menerima surel baru.Anda tidak memiliki surel di folder %s.Anda memiliki email lama di folder %s.Anda memiliki surel lamaterlalu panjang karakter berurutanLevel:Masuk:Sebagai:Linux-PAM-1.1.8/po/ml.po0000644000000000000000000006572612216527620011533 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ani Peter , 2007,2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-15 05:55+0000\n" "Last-Translator: Ani Peter \n" "Language-Team: Malayalam \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ml\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...സമയപരിധി അവസാനിക്കുന്നു...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...ക്ഷമിക്കണം, നിങ്ങളുടെ സമയം കഴിഞ്ഞിരിക്കുന്നു!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "തെറ്റായ സംവാദം (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "അടയാളവാക്ക്: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "പുതിയ %s%s അടയാളവാക്ക്: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "വീണ്ടും %s%s അടയാളവാക്ക് ടൈപ്പ് ചെയ്യുക: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "ക്ഷമിക്കണം, അടയാളവാക്കുകള്‍ തമ്മില്‍ ചേരുന്നില്ല." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s വീണ്ടും ടൈപ്പ് ചെയ്യുക" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "അടയാളവാക്ക് മാറ്റം വരുത്തുന്നതു് നിര്‍ത്തിയിരിക്കുന്നു." #: libpam/pam_item.c:311 msgid "login:" msgstr "ലോഗിന്‍:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "വിജയിച്ചു" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "ഗുരുതരമായ പിശക് - ഉടന്‍ അവസാനിപ്പിക്കുക" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "മൊഡ്യൂള്‍ ലഭ്യമാക്കുന്നതില്‍ പരാജയപ്പെട്ടു" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "ചിഹ്നം ലഭ്യമായില്ല" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "സര്‍വീസ് മൊഡ്യൂളില്‍ പിഴവ്" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "സിസ്റ്റമില്‍ പിഴവ്" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "മെമ്മറി ബഫറില്‍ പിശക്" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "പ്രവേശനം അനുവദിക്കുന്നതല്ല" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "ആധികാരികത ഉറപ്പാക്കുന്നതില്‍ പിശക്" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "ആധികാരികത ഉറപ്പാക്കുന്നതിന് മതിയായ ഡേറ്റാ ലഭ്യമാല്ല" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "ആധികാരികത ഉറപ്പാക്കുന്ന സര്‍വീസിന്, ആവശ്യമുളള വിവരങ്ങള്‍ ലഭ്യമാക്കുവാന്‍ സാധ്യമായില്ല" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "പറഞ്ഞിരിക്കുന്ന ഓഥന്റിക്കേഷന്‍ മൊഡ്യൂളില്‍ ഉപയോക്താവു് ലഭ്യമല്ല" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "സര്‍വീസ് ഇനി ലഭ്യമാക്കുവാന്‍ സാധ്യമാകുന്നതല്ല" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "ഓഥന്റിക്കേഷന്‍ ടോക്കന്റെ കാലാവധി കഴിഞ്ഞിരിക്കുന്നു; പുതിയത് നല്‍കുക" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "ഉപയോക്താവിന്റെ അക്കൌണ്ടിന്റെ കാലാവധി അവസാനിച്ചിരിക്കുന്നു" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "പറഞ്ഞിരിക്കുന്ന സെഷന് ആവശ്യമുളള എന്‍ട്രി ഉണ്ടാക്കുവാനോ നീക്കുവാനോ സാധ്യമാകുന്നല്ല" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "ഓഥന്റിക്കേഷന്‍ സര്‍വീസിന് ഉപയോക്താവിന്റെ വിവരങ്ങള്‍ ലഭ്യമാക്കുവാന്‍ സാധ്യമായില്ല" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "ഉപയോക്താവിന്റെ ആനുകൂല്യങ്ങളുടെ കാലാവധി അവസാനിച്ചിരിക്കുന്നു" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "ഉപയോക്താവിനുള്ള ആനുകൂല്യങ്ങള്‍ ക്രമികരിക്കുന്നതില്‍ പരാജയപ്പെട്ടു" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "മൊഡ്യൂള്‍ അനുസരിച്ചുളള ഡേറ്റ ലഭ്യമല്ല" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item()-ലേക്ക് തെറ്റായ വസ്തു നല്‍കിയിരിക്കുന്നു" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "സംവാദത്തിലുളള പിശക്" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "ഓഫന്റിക്കേഷന്‍ ടോക്കന്‍ കൈകാര്യം ചെയ്യുന്നതില്‍ പിശക്" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "ഓഥന്റിക്കേഷന്‍ വിവരം വീണ്ടെടുക്കുവാന്‍ സാധ്യമല്ല" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "ഓഥന്റിക്കേഷന്‍ ടോക്കന്‍ ലോക്ക് ഉപയോഗത്തിലാണ്" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "ഓഥന്റിക്കേഷന്‍ ടോക്കന്‍ ഏജിങ് പ്രവര്‍ത്തന രഹിതമാണ്" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "അടയാളവാക്ക് സര്‍വീസിന്റെ ആദ്യത്തെ പരിശോധന പരാജയപ്പെട്ടു" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "തിരികെ നല്‍കുന്ന മൂല്ല്യം PAM ഡിസ്പാച്ച് അവഗണിക്കേണ്ടതാകുന്നു" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "മൊഡ്യൂള്‍ ലഭ്യമല്ല" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "ഓഥന്റിക്കേഷന്‍ ടോക്കന്റെ കാലാവധി അവസാനിച്ചിരിക്കുന്നു" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "സംവാദം ഒരു ഇവന്റിനായി കാത്തിരിക്കുന്നു" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "പ്രയോഗങ്ങള്‍ക്ക് വീണ്ടും libpam ആവശ്യമുണ്ട്" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "അപരിചിതമായ PAM പിശക്" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "പഴയത് പോലെ തന്നെയാകുന്നതു്" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "മെമ്മറി അനുവദിയ്ക്കുന്നതില്‍ പിശക്" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "ഒരു പാലിന്‍ഡ്രോം ആണു്" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "അക്ഷരങ്ങളുടെ വലിപ്പം മാത്രം മാറുന്നതു്" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "പഴയതിന് സാമ്യമുള്ളതു്" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "സാധാരണയുള്ളതു്" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "is rotated" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "മതിയായ ക്യാരക്ടര്‍ ക്ലാസ്സുകള്‍ ലഭ്യമല്ല" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "അടുത്തടുത്ത് ഒരേപോലുള്ള അനവധി അക്ഷരങ്ങളുണ്ടു്" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "വളരെയധികം ഒരേ തരത്തിലുള്ള അക്ഷരങ്ങളടങ്ങുന്നു" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "ഉപയോക്താവിന്റെ നാമം ഏതെങ്കിലും ഒരു തരത്തിലുണ്ടു്" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "അടയാളവാക്ക് നല്‍കിയിട്ടില്ല" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "അടയാളവാക്ക് മാറ്റിയിട്ടില്ല" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "തെറ്റായ അടയാളവാക്ക്: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s പരാ‍ജയപ്പെട്ടു: %d എന്ന കോഡില്‍ നിന്നും പുറത്ത് കടക്കുക" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s പരാ‍ജയപ്പെട്ടു: %d%s സിഗ്നല്‍ ലഭ്യമായിരിക്കുന്നു" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s പരാ‍ജയപ്പെട്ടു: അപരിചിതമായ 0x%x നിലവാരം" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s-ല്‍ നിന്നും" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s-ല്‍" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "അവസാനം ലോഗിന്‍ ചെയ്തത്:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "നിങ്ങളുടെ പുതിയ അക്കൌണ്ടിലേക്ക് സ്വാഗതം!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "അവസാനം ലോഗിന്‍ ചെയ്തതു് പരാജയപ്പെട്ടു:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "ശരിയായി അവസാനം ലോഗിന്‍ ചെയ്ത ശേഷം %d തവണ ലോഗിന്‍ പരാജയപ്പെട്ടു." msgstr[1] "ശരിയായി അവസാനം ലോഗിന്‍ ചെയ്ത ശേഷം %d തവണ ലോഗിന്‍ പരാജയപ്പെട്ടു." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "ശരിയായി അവസാനം ലോഗിന്‍ ചെയ്ത ശേഷം %d തവണ ലോഗിന്‍ പരാജയപ്പെട്ടു." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s'-ന് അനവധി ലോഗിനുകള്‍." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "മെയില്‍ ഇല്ല." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "നിങ്ങള്‍ക്ക് പുതിയ മെയില്‍ ഉണ്ട്." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "നിങ്ങള്‍ക്ക് പഴയ മെയില്‍ ഉണ്ട്." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "നിങ്ങള്‍ക്ക് മെയില്‍ ഉണ്ട്." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "%s ഫോള്‍ഡറില്‍ നിങ്ങള്‍ക്ക് മെയില്‍ ഇല്ല." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "%s ഫോള്‍ഡറില്‍ നിങ്ങള്‍ക്ക് പുതിയ മെയില്‍ ഉണ്ട്." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "%s ഫോള്‍ഡറില്‍ നിങ്ങള്‍ക്ക് പഴയ മെയില്‍ ഉണ്ട്." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "%s ഫോള്‍ഡറില്‍ നിങ്ങള്‍ക്ക് മെയില്‍ ഉണ്ട്." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "'%s' ഡയറക്ടറി ഉണ്ടാക്കുന്നു." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "%s ഡയറക്ടറി ഉണ്ടാക്കുവാനും ആരംഭിക്കുവാനും സാധ്യമായില്ല." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "അടയാളവാക്ക് നിലവില്‍ ഉപയോഗിത്തിലുള്ളതാണ്. മറ്റൊന്ന് നല്‍കുക." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "രഹസ്യവാക്ക് നിലവില്‍ ഉപയോഗിച്ചിരിയ്ക്കുന്നു." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "സ്വതവേയുള്ള സെക്യൂരിറ്റി കോണ്‍ടെക്സ്റ്റ് %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "നിങ്ങള്‍ക്കു് മറ്റൊരു ജോലി അല്ലെങ്കില്‍ നില നല്‍കണമോ?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ജോലി:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "%s ജോലിയ്ക്കു് സ്വതവേയുള്ള തരം ലഭ്യമല്ല\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "നില: " #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "ശരിയായ സെക്യൂരിറ്റി കോണ്‍ടെക്സ്റ്റ് അല്ല" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s-നുള്ള ശരിയായ കോണ്‍ടെക്സ്റ്റ് ലഭ്യമല്ല" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "%s എന്ന സെക്യൂരിറ്റി കോണ്‍ടെക്സ്റ്റ് നല്‍കിയിരിക്കുന്നു" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "കീ ഉണ്ടാക്കുന്നതിനുള്ള കോണ്‍ടെക്സ്റ്റ് ആയ %s നല്‍കിയിരിക്കുന്നു" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM ആരംഭിക്കുന്നതില്‍ പരാജയം\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() ചെയ്യുന്നതില്‍ പരാജയം\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: ഫോര്‍ക്ക് ചെയ്യുന്നതില്‍ പരാജയം: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s-നുളള STRESS അടയാളവാക്ക് മാറ്റുന്നു." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "പുതിയ STRESS അടയാളവാക്ക് നല്‍കുക: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "പുതിയ STRESS അടയാളവാക്ക് വീണ്ടും ടൈപ്പ് ചെയ്യുക: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "അടയാളവാക്ക് ഉറപ്പാക്കുന്നതിനായി ടൈപ്പ് ചെയ്തത് തെറ്റാണ്; അടയാളവാക്ക് മാറ്റിയിട്ടില്ല" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "അക്കൌണ്ട് താല്‍ക്കാലികമായി പൂട്ടിയിരിക്കുന്നു (%ld നിമിഷങ്ങള്‍ ബാക്കി)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u പരാജയപ്പെട്ട ലോഗിനുകള്‍ കാരണം അക്കൌണ്ട് താല്‍ക്കാലികമായി പൂട്ടിയിരിക്കുന്നു" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "ആധികാരികത ഉറപ്പാക്കുന്നതില്‍ പിശക്" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "സര്‍വീസ് പിശക്" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "അപരിചിതമായ ഉപയോക്താവു്" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "അപരിചിതമായ പിശക്" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s:നല്‍കിയിരിക്കുന്ന നംബര്‍ തെറ്റാണ്, --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Unrecognised ഉപാധി %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: എല്ലാ ഉപയോക്താക്കള്‍ക്കും പൂജ്യം അല്ലാതെ ക്രമികരിക്കുവാന്‍ സാധ്യമല്ല\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Failures Latest failure From\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "അനുവാദം നല്‍കിയിരിക്കുന്നു (ഒടുവില്‍ പ്രവേശിച്ചതു് %ld സെക്കന്‍ഡുകള്‍ക്കു് മുമ്പാണു്)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "നിങ്ങളുടെ അക്കൌണ്ടിന്റെ കാലാവധി അവസാനിച്ചിരിക്കുന്നു; ദയവായി സിസ്റ്റം അഡ്മിനിസ്ട്രേറ്ററുമായി " "ബന്ധപ്പെടുക" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "നിങ്ങളുടെ അടയാളവാക്ക് ഉടനെ മാറ്റേണ്ടതുണ്ട് (root enforced)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "നിങ്ങളുടെ അടയാളവാക്ക് ഉടനെ മാറ്റേണ്ടതുണ്ട് (അടയാളവാക്ക് മാറ്റുന്നതിന് സമയമായി)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "മുന്നറിയിപ്പ്: നിങ്ങളുടെ അടയാളവാക്കിന്റെ കാലാവധി %d ദിവസത്തിനുള്ളില്‍ അവസാനിക്കുന്നു" msgstr[1] "മുന്നറിയിപ്പ്: നിങ്ങളുടെ അടയാളവാക്കിന്റെ കാലാവധി %d ദിവസത്തിനുള്ളില്‍ അവസാനിക്കുന്നു" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "മുന്നറിയിപ്പ്: നിങ്ങളുടെ അടയാളവാക്കിന്റെ കാലാവധി %d ദിവസത്തിനുള്ളില്‍ അവസാനിക്കുന്നു" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS അടയാളവാക്ക് മാറ്റുവാന്‍ സാധ്യമാകുന്നില്ല." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "ഇതിലും വലിയ അടയാളവാക്ക് തിരഞ്ഞെടുക്കുക" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s-നുളള അടയാളവാക്ക് മാറ്റുന്നു." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(നിലവിലുളളത്) UNIX രഅടയാളവാക്ക്: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "നിങ്ങളുടെ അടയാളവാക്ക് മാറ്റുന്നതിനായി ഇനിയും കാത്തിരിക്കേണ്ടതാണ്." #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "പുതിയ UNIX അടയാളവാക്ക് നല്‍കുക: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "പുതിയ UNIX അടയാളവാക്ക് വീണ്ടും ടൈപ്പ് ചെയ്യുക: " Linux-PAM-1.1.8/po/zh_TW.gmo0000644000000000000000000002522212216527621012306 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % &B&`2Gu">4-,b%  $' 5Q3g%1 $; $`      !9!!R!t!!*!'!-!!$"F"1_""""""##-#!=#_#~#?## ##$ $#5$!Y${$ $$$$ $$F%:K%!%)%!%% &&,&E&*^&$&+&1& '0+'6\'5'"''%'"(%8(%^((('(9()$.)!S)$u))))) )) * #* -* 7*A*_*u* *,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-12-16 08:46+0000 Last-Translator: Cheng-Chia Tseng Language-Team: Chinese (Taiwan) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zh_TW Plural-Forms: nplurals=1; plural=0; %a %b %e %H:%M:%S %Z %Y從 %.*s在 %.*s%s 失敗:捕捉到信號 %d%s%s 失敗:退出編碼 %d%s 失敗:不明狀態 0x%x%s: 不良的號碼提供至 --reset= %s: 無法將所有使用者重新設定為非零 %s: 未識別的選項 %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (目前的)UNIX 密碼:...抱歉,您的時間已到! ...時間已經超過... 已賦予存取權限(最後一次存取為 %ld 秒前)。因為嘗試登入 %u 次失敗,帳號已被封鎖帳號暫時被鎖住(還剩下 %ld 秒)應用程式需要再次呼叫 libpam驗證錯誤驗證失敗無法恢復驗證資訊驗證服務無法取出驗證資訊驗證服務無法取出使用者憑證驗證記號計時已停用驗證記號已逾期驗證記號已經失效;需要新的驗證記號驗證記號鎖定忙碌驗證記號處理錯誤不良的密碼: %s不良的項目傳送至 pam_*_item()無法為指定的工作階段製作/移除項目正在更改 %s 的 STRESS 密碼。正在更改 %s 的 STRESS 密碼。交談錯誤交談正在等候事件建立目錄「%s」。嚴重錯誤 - 立即終止預設的安全網路位置 %s 輸入新的 STRESS 密碼:輸入新的 UNIX 密碼:服務模組發生錯誤密碼服務的初步檢查失敗載入模組失敗無法設定使用者憑證服務的重試次數已超過最大數量憑證不足,無法存取驗證資料已指建置金鑰的定安全網路位置 %s上一次失敗的登入:%s%s%s上一次登入:%s%s%sLogin Failures Latest failure From 記憶體暫存區錯誤未知的模組無法變更 NIS 密碼。新 %s%s密碼:%s 沒有預設的類型 沒有郵件。沒有模組的詳細資料未提供密碼不是有效的安全網路位置已終止密碼變更作業。密碼已被使用過。密碼已經由其他使用者使用。請選擇其他密碼。密碼未變更密碼:許可權被拒絕重新輸入 %s再次輸入新的 %s%s密碼:再次輸入新的 STRESS 密碼:再次輸入新的 UNIX 密碼:已指定安全網路位置 %s服務錯誤抱歉,密碼不符合。成功找不到符號系統錯誤PAM 發送應忽略傳回值自上次成功登入後,有 %d 次試圖登入但失敗的紀錄。自從上次成功登入後有 %d 次嘗試登入失敗。對 '%s' 進行太多次登入。無法建立和初始化「%s」目錄。無法取得 %s 的有效 context未知的 PAM 錯誤未知的錯誤未知的使用者使用者帳戶已逾期使用者憑證已逾期底層的驗證模組無法識別使用者確認錯誤輸入;密碼未變更警告:您的密碼將於 %d 天內過期警告:您的密碼將在 %d 天之後過期。歡迎使用您的新帳號!您是否希望輸入不同的角色或層級?您必須立刻變更您的密碼 (密碼使用過久)您必須立刻變更您的密碼 (root 強制執行)資料夾 %s 中有您的郵件。您有郵件。資料夾 %s 中有您的新郵件。您有新的郵件。資料夾 %s 中沒有您的郵件。資料夾 %s 中有您的舊郵件。您有舊的郵件。您必須選擇更長的密碼您必須久候,以更改您的密碼您的帳戶已經逾期,請洽詢您的系統管理員僅變更大小寫包含了某些格式的用戶名稱包含過多的單調字元序段包含了太多連續的相同字元錯誤的交談 (%d) 起始 PAM 失敗 pam_set_item() 失敗 是一個回文已旋轉與舊的密碼相同與舊的密碼太相似太簡單層級:登入:登入:失敗的分叉:%m記憶體分配錯誤字元類別不足角色:Linux-PAM-1.1.8/po/pt_BR.po0000644000000000000000000004341412216527620012117 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Diego Búrigo Zacarão , 2008. # Elder Marco , 2012. # Glaucia Cintra , 2007. # Taylon Silmer , 2008, 2009. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-02-21 12:49+0000\n" "Last-Translator: Elder Marco \n" "Language-Team: Portuguese (Brazil) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...O tempo está acabando...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Desculpe, seu tempo está aumentando!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "conversação errônea (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Senha:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nova %s%ssenha:" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Redigite a nova %s%ssenha:" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "As senhas não são iguais." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Redigite %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "A alteração de senha foi abortada." #: libpam/pam_item.c:311 msgid "login:" msgstr "login:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Sucesso" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Erro crítico - abortar imediatamente" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Falha ao carregar módulo" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Símbolo não encontrado" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Erro no módulo de serviço" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Erro do sistema" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Erro do buffer de memória" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Permissão negada" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Falha de autenticação" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Credenciais insuficientes para acessar dados de autenticação" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "O serviço de autenticação não recuperou informações de autenticação" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Usuário desconhecido para o módulo de autenticação subjacente" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Esgotado o número máximo de tentativas para serviço" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "O token de autenticação não é mais válido; é necessario um novo token" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "A conta do usuário expirou" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Impossível fazer/remover uma entrada para a sessão específica" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "O serviço de autenticação não recuperou as credenciais do usuário" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Credenciais do usuário expiradas" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Falha ao definir credenciais do usuário" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Não há nenhum dado específico para o módulo " #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Ítem incorreto passado para pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Erro de conversação" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Erro de manipulação de token de autenticação" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Impossível recuperar informações de autenticação" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Bloqueio de token de autenticação ocupado" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Validade do token de autenticação desabilitado" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Falha na verificação preliminar por serviço de senha" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "O valor de retorno deve ser ignorado pelo despacho PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Módulo desconhecido" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Token de autenticação expirado" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Conversação aguardando por evento" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "O aplicativo precisa chamar libpam novamente" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Erro desconhecido no PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "é igual à antiga senha" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "Erro de alocação de memória" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "é um palíndromo" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "mudou apenas maiúsculas/minúsculas" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "é muito semelhante à antiga" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "é simples demais" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "foi invertida" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "classes de caractere insuficientes" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "contém muitos caracteres igual consecutivamente" #: modules/pam_cracklib/pam_cracklib.c:664 #, fuzzy msgid "contains too long of a monotonic character sequence" msgstr "contém muitos caracteres igual consecutivamente" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "contém o nome de usuário em algum formulário" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Nenhuma senha informada" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Senha inalterada" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "SENHA INCORRETA: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s falhou: código de saída %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s falhou: detectou sinal %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s falhou: status desconhecido 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "%a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "de %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "em %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Último login:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Bem-vindo à sua nova conta!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Falha no último login:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "Houve %d falhas de login desde o último login bem sucedido." msgstr[1] "Houveram %d falhas de login desde o último login bem sucedido." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "Houveram %d falhas de login desde o último login bem sucedido." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Há logins demais para '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Não há mensagens." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Há novas mensagens." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Há mensagens antigas." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Há mensagens." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Não há mensagens na pasta %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Há novas mensagens na pasta %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Há mensagens antigas na pasta %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Há mensagens na pasta %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Criando o diretório '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Impossível criar e inicializar o diretório \"%s\"." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "A senha já foi usada. Escolha outra." #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "A senha já foi usada. Escolha outra." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Contexto de Segurança Padrão %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Deseja digitar uma função ou nível diferente?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "função:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Não existe tipo padrão para a função %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "nível:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Não é um contexto de segurança válido" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Impossível obter um contexto válido para %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Contexto de segurança %s atribuído" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Contexto de criação de chave %s atribuído" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "falha ao inicializar PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "falha em pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: falha na bifurcação: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Mudando senha STRESS para %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Digite a nova senha STRESS:" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Digite novamente a nova senha STRESS:" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Verificação digitada incorretamente; senha inalterada" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Conta temporariamente bloqueada (restam %ld segundos)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Conta bloqueada devido a %u falhas de login" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Erro de autenticação" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Erro de serviço" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Usuário desconhecido" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Erro desconhecido" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Número insuficiente fornecido para --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Opção não reconhecida %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Impossível redefinir todos os usuários para não-zero\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Falhas Último falha De\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Acesso concedido (o último acesso foi a %ld segundos atrás)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Sua conta expirou; entre em contato com o administrador do sistema" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Mude sua senha imediatamente (aplicado pela raiz)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Mude sua senha imediatamente (senha expirada)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Aviso: sua senha irá expirar em %d dia" msgstr[1] "Aviso: sua senha irá expirar em %d dias" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Aviso: sua senha irá expirar em %d dias" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "A senha NIS não pôde ser mudada." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Escolha uma senha mais longa" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Mudando senha para %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "Senha UNIX (atual):" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Aguarde mais tempo para mudar a senha" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Digite a nova senha UNIX:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Redigite a nova senha UNIX:" #~ msgid "Would you like to enter a security context? [N] " #~ msgstr "Deseja digitar um contexto de segurança? [N]" Linux-PAM-1.1.8/po/br.gmo0000644000000000000000000000075712216527620011663 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Breton (http://www.transifex.com/projects/p/fedora/language/br/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: br Plural-Forms: nplurals=2; plural=(n > 1); Linux-PAM-1.1.8/po/sr@latin.gmo0000644000000000000000000002633112216527620013030 00000000000000x( ) B M V t  ! &  G uX    1 &Q +x &   . :& 7a #  9 '3[l5 !2 Kl, 4;6p 1%9"Kn"/E Xc u # 42AtDA/["  6 *DZo-2DHD0Oo!,B#&/Jz  -4;Vsya{  #@OTnR#l>-6$In5E>!3`!=11& X 0j 2   !!1!"O!&r!!!!/!"-<"0j"7"*"#""#0;#l##%##%##'$/$F$f$,$$ $$$!$$%"@%#c%%#%%%%2%&E&1'*O'+z''''''4(5R((2 ) S).t)6)7)* .* <*]*p*!***)*9 +E+&b+(++!+0+ !, .,<,P,n,,,!,,,O'J%[(v:+D;Xx`1\uWwb"sG.qU EZp*F&jhA6k8 )Co?/39gH=^#,i5dt ]!RcT7r2Nle4 Lf-BP aS>m_0IMn$@KVQ Y< %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mnot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:59+0000 Last-Translator: Tomáš Mráz Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sr@latin Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2) %a %e. %b %H:%M:%S %Z %Y sa %.*s na %.*s%s neuspeh: uhvaćen signal %d%s%s neuspeh: izlazni kod %d%s neuspeh: nepoznat status 0x%x%s: zadat je loš broj za --reset= %s: ne mogu da povratim sve korisnike na broj različit od nule %s: nije prepoznata opcija %s %s: [--file korenski-nazivdatoteke] [--user korisničkoime] [--reset[=n]] [--quiet] %s: [- korenski-nazivdatoteke] [--file korenski-nazivdatoteke] [-u korisničkoime] [--user korisničkoime] [-r] [--reset[=n]] [--quiet] (trenutna) UNIX lozinka: ...Izvinite, vreme vam je isteklo! ...Ističe vreme... Pristup je odobren (poslednji pristup je bio pre %ld sekundi).Nalog je zaključan zbog %u neuspelih prijavaNalog je privremeno zaključan (ostalo je %ld sekundi)Program mora ponovo da pozove libpamGreška pri autentifikacijiNeuspešna autentifikacijaInformacije o autentifikaciji ne mogu biti povraćeneUsluga autentifikacije ne može da dobavi informacije autentifikacijeUsluga autentifikacije ne može da dobavi korisnička uverenjaZastarevanje žetona autentifikacije je isključenoIstekao je žeton autentifikacijeŽeton autentifikacije više nije ispravan; neophodan je noviZaključavanje žetona autentifikacije je zauzetoGreška pri manipulaciji žetonom autentifikacijeLOŠA LOZINKA: %sLoš objekat je prosleđen pam_*_item() funkcijiNe mogu da napravim/uklonim stavku navedene sesijePromena STRESS lozinke za %s.Menjam lozinku za %s.Greška u razgovoruRazgovor očekuje događajPravim direktorijum „%s“.Kritična greška - prekidam odmahPodrazumevani bezbednosni kontekst %s Unesite novu STRESS lozinku: Unesite novu UNIX lozinku: Greška u uslužnom moduluNeuspešna preliminarna provera uslugom lozinkeNeuspešno učitavanje modulaNeuspešno postavljanje korisničkih uverenjaIskorišćen je maksimalni broj pokušaja uslugeNedovoljno uverenja za pristup podacima autentifikacijeKontekst pravljenja ključa %s je dodeljenPoslednja neuspešna prijava:%s%s%sPoslednja prijava:%s%s%sPrijava Neuspesi Poslednji neuspeh Sa Greška memorijskog baferaModul je nepoznatNIS lozinka ne može biti promenjena.Nova %s%slozinka: Nema podrazumevane vrste za ulogu %s Nemate poštu.Nisu prisutni specifični podaci modulaNije ponuđena lozinkaNeispravan bezbednosni kontekstPromena lozinke je prekinuta.Lozinka je već u upotrebi. Izaberite drugu.Lozinka nije promenjenaLozinka: Dozvola je odbijenaPonovo unesite %sPonovo unesite novu %s%slozinku: Ponovo unesite novu STRESS lozinku: Ponovo unesite novu UNIX lozinku: Bezbednosni kontekst %s je dodeljenGreška uslugeIzvinite, lozinke se ne podudaraju.UspešnoSimbol nije pronađenSistemska greškaPAM dispečer treba da ignoriše povratnu vrednostBio je %d neuspeo pokušaj prijave od poslednje uspešne prijave.Bilo je %d neuspela pokušaja prijave od poslednje uspešne prijave.Bilo je %d neuspelih pokušaja prijave od poslednje uspešne prijave.Bilo je %d neuspelih pokušaja prijave od poslednje uspešne prijave.Previše prijava za „%s“.Ne mogu da napravim direktorijum „%s“.Ne mogu da pribavim ispravan kontekst za %sNepoznata PAM greškaNepoznata greškaNepoznat korisnikKorisnički nalog je istekaoKorisnička uverenja su isteklaKorisnik nije poznat osnovnom modulu autentifikacijePotvrda je pogrešno ukucana; lozinka nije promenjenaUpozorenje: vaša lozinka će isteći kroz %d danUpozorenje: vaša lozinka će isteći kroz %d danaUpozorenje: vaša lozinka će isteći kroz %d danaUpozorenje: vaša lozinka će isteći kroz %d danaDobro došli na vaš novi nalog!Da li želite da unesete drugu ulogu ili nivo?Morate odmah da promenite vašu lozinku (zastarela je)Morate odmah da promenite vašu lozinku (nametnuo root)Imate poštu u fascikli %s.Imate poštu.Imate novu poštu u fascikli %s.Imate novu poštu.Nemate poštu u fascikli %s.Imate staru poštu u fascikli %s.Imate staru poštu.Morate izabrati dužu lozinkuMorate duže sačekati na promenu lozinkeVaš nalog je istekao; obratite se administratoru sistemasamo promene veličine slovasadrži korisničko ime u nekom oblikusadrži previše istih znakova uzastopnorazgovor pun grešaka (%d) neuspešna inicijalizacija PAM-a neuspešno izvršavanje funkcije pam_set_item() palindrom jeizokrenuta jeista je kao i starasuviše je slična prethodnojsuviše je jednostavnanivo:prijava:prijava: greška pri grananju: %mnema dovoljno klasa znakovauloga:Linux-PAM-1.1.8/po/it.po0000644000000000000000000004364312216527617011537 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # fvalen , 2013 # fvalen , 2012 # Luca Bruno , 2007 # mario_santagiuliana , 2009 # Novell Language , 2007 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-09 03:03+0000\n" "Last-Translator: fvalen \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Il tempo sta per scadere...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Tempo scaduto!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "conversazione errata (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Password: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nuova password%s%s: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Reimmettere la nuova password%s%s: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Le password non corrispondono." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Reimmettere %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Cambio della password abortito." #: libpam/pam_item.c:311 msgid "login:" msgstr "login:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Successo" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Errore critico - interruzione immediata" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Caricamento del modulo fallito" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Simbolo non trovato" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Errore nel modulo di servizio" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Errore di sistema" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Errore buffer memoria" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Permesso negato" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Autenticazione fallita" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Credenziali insufficienti per accedere ai dati di autenticazione" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" "Il servizio di autenticazione non è in grado di recuperare le informazioni " "di autenticazione" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Utente sconosciuto al modulo di autenticazione sottostante" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Superato il numero massimo di tentativi per il servizio" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Token di autenticazione non più valido; ne è richiesto uno nuovo" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Account utente scaduto" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Impossibile creare/rimuovere una voce per la sessione specificata" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "Il servizio di autenticazione non è in grado di recuperare le credenziali " "utente" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Credenziali utente scadute" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Impostazione delle credenziali utente fallita" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Dati specifici del modulo non presenti" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Elemento errato passato a pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Errore di conversazione" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Errore manipolazione token di autenticazione" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Impossibile ripristinare informazioni di autenticazione" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Blocco token di autenticazione occupato" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Invecchiamento del token di autenticazione disabilitato" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Controllo preliminare del servizio password fallito" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Il valore restituito dovrebbe essere ignorato dal dispatch PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Modulo sconosciuto" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Token di autenticazione scaduto" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Conversazione in attesa di un evento" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "L'applicazione richiede una nuova chiamata a libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Errore PAM sconosciuto" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "è la stessa di quella precedente" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "errore allocazione memoria" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "è un palindromo" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "cambiano solo le maiuscole/minuscole" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "è troppo simile alla precedente" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "è troppo semplice" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "è una rotazione della precedente" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "non ha abbastanza classi di caratteri" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "contiene troppi caratteri simili consecutivi" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "contiene una sequenza troppo lunga di caratteri simili " #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "contiene il nome utente in alcune forme" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Nessuna password fornita" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Password non modificata" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "PASSWORD ERRATA: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s fallita: codice d'uscita %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s fallita: intercettato il segnale %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s fallita: stato sconosciuto 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H.%M.%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " da %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " su %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Ultimo accesso:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Benvenuti nel nuovo account!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Ultimo accesso fallito:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Si è verificato un tentativo di login %d fallito dall'ultimo tentativo di " "login con successo." msgstr[1] "" "Si è verificato un tentativo di login %d fallito dall'ultimo tentativo di " "login con successo." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Si sono verificati alcuni tentativi di login %d falliti dall'ultimo " "tentativo di login con successo." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Ci sono troppi accessi per \"%s\"." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Nessuna email." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Nuove email." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Email vecchie." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Email esistenti." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "La cartella %s non contiene alcuna email." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "La cartella %s contiene nuove email." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "La cartella %s contiene vecchie email." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "La cartella %s contiene email." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Creazione della directory \"%s\"." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Impossibile creare e inizializzare la directory '%s'" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Password già utilizzata. Sceglierne un'altra." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "La password è stata già utilizzata." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Contesto di sicurezza predefinito %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Immettere un ruolo o livello differente?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ruolo:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Nessun tipo predefinito per il ruolo %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "livello:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Non è un contesto di sicurezza valido" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Impossibile ottenere un contesto valido per %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Contesto di sicurezza %s assegnato" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Contesto di creazione chiave %s assegnato" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "impossibile inizializzare PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "Impossibile eseguire pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: forking fallito: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Cambio password STRESS per %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Immettere nuova password STRESS: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Reimmettere la nuova password STRESS: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Errore di digitazione per verifica; password non cambiata" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Account momentaneamente bloccato (%ld secondi rimanenti)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Account bloccato a causa di %u login falliti" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Errore di autenticazione" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Errore del servizio" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Utente sconosciuto" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Errore sconosciuto" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Numero errato fornito a --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Opzione non riconosciuta %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "%s: [--file NOMEFILE] [--user NOMEUTENTE] [--reset[=N]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: Impossibile ripristinare tutti gli utenti a valori diversi da zero\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Ultimi Fallimenti Da\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Accesso permesso (ultimo accesso risale a %ld secondi fa)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Account scaduto; contattare l'amministratore di sistema" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" "È richiesta la modifica immediata della password (imposto " "dall'amministratore)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" "È richiesta la modifica immediata della password (password troppo vecchia)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Avviso: la password scadrà tra %d giorno" msgstr[1] "Avviso: la password scadrà tra %d giorni" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Avviso: la password scadrà tra %d giorni" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Impossibile modificare la password NIS." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Scegliere una password più lunga" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Cambio password per %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "Password UNIX (corrente): " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Attendere ancora per cambiare la password" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Immettere nuova password UNIX: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Reimmettere la nuova password UNIX: " Linux-PAM-1.1.8/po/ta.gmo0000644000000000000000000004406212216527620011661 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % r_nhWGu0:DR& y !!h6""F"Q#kR#}#V<$D$$^]%H%2&m8&&]N'V'%(k)(C(n(WH)\)Z)8X**G+oc++hV,o,W/-2--/U.:.R./^2/#/T/R 0[]0]0x11LB22"252V3u_3s3\I44G45=5Y5v5O6_7M8|O8]8&*9"Q9%t9D9J9v*::9;|3<v<'==>^\?E?n@Up@[@k"ARAAmBCTC^C[D|D4hEEECE'F1FF?xF?FEF >GLGiGGGTG!H,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-10 14:40+0000 Last-Translator: shkumar Language-Team: Tamil MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ta Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y%.*s இலிருந்து %.*s இல்%s செயலிழக்கப்பட்டது: சிக்னல் %d%s பிடிக்கப்பட்டது%s செயலிழக்கப்பட்டது: வெளியேறும் குறியீடு %d%s செயலிழக்கப்பட்டது: தெரியாத நிலை 0x%x%s: தவறான எண் --reset= க்கு கொடுக்கப்பட்டுள்ளது %s: பூஜ்ஜியமில்லாததற்கு அனைத்து பயனர்களையும் மறு அமைக்க முடியவில்லை %s: அங்கீகரிக்கப்படாத விருப்பம் %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (நடப்பு) UNIX கடவுச்சொல்: ... உங்கள் நேரம் முடிந்தது! ... நேரம் போய் கொண்டிருக்கிறது... அணுகல் வழங்கப்பட்டது (கடைசி அணுகல் %ld விநாடிகளுக்கு முன்).%u தோல்வி புகுபதிவுகளால் கணக்கு பூட்டப்பட்டுள்ளதுகணக்கு தற்காலிகமாக பூட்டப்பட்டுள்ளது (%ld விநாடிகள் உள்ளன)பயன்பாடு libpam ஐ மீண்டும் அழைக்க வேண்டும்உரிம பிழைஉரிமம் செயலிழக்கப்பட்டதுஉரிம தகவலை எடுக்க முடியவில்லைஉரிம சேவை உரிம தகவலை எடுக்க முடியவில்லைஉரிம சேவை பயனர் சன்மானத்தை எடுக்க முடியவில்லைஉரிம டோக்கன் செயலிழக்கப்பட்டதுஉரிம டோக்கற் முடிவுற்றதுஉரிம டோக்கன் தவறானது; புதிய ஒன்று தேவைப்படுகிறதுஉரிம டோக்கன் பூட்டு செயலில் உள்ளதுஉரிம டோக்கன் கணக்கீடு பிழைதவறான கடவுச்சொல்: %spam_*_item() க்கு தவறான உருப்படி அனுப்பப்பட்டதுகுறிப்பிட்ட அமர்வுக்கு உள்ளீட்டை உருவாக்க/நீக்க முடியவில்லை%sக்கு STRESS கடவுச்சொல்லை மாற்றுகிறது.%sக்கு கடவுச்சொல்லை மாற்றுகிறது.உரையாடல் பிழைஉரையாடல் நிகழ்வுக்காக காத்திருக்கிறதுஅடைவு '%s'ஐ உருவாக்குகிறது.சிக்கலான பிழை - உடனடியாக நிறுத்தப்பட்டதுமுன்னிருப்பு பாதுகாப்பு சூழல் %s புதிய STRESS கடவுச்சொல்லை உள்ளிடவும்: புதிய UNIX கடவுச்சொல்லை உள்ளிடவும்: சேவை தொகுதியில் பிழைகடவுச்சொல் சேவையால் முதல் சோதனை செய்ய முடியவில்லைதொகுதியை ஏற்ற முடியவில்லைசெயலிழக்கப்பட்ட அமைவு பயனர் சன்மானங்கள்சேவைக்கு அதிகபட்ச எண்ணிக்கையான முயற்சி கொண்டதுஉரிம தரவினை அணுக போதிய உரிமங்கள் இல்லைவிசை உருவாக்க சூழல் %s ஒதுக்கப்பட்டுள்ளதுகடைசி தோல்வியடைந்த புகுபதிவு:%s%s%sகடைசி புகுபதிவு:%s%s%sபுகுபதிவு கடைசி தோல்வி தோல்வியடைந்தது இங்கிருந்து நினைவக இடையக பிழைதொகுதியை தெரியவில்லைNIS கடவுச்சொல்லை மாற்ற முடியாது.புதிய %s%spassword: பங்கு %sக்கு முன்னிருப்பு வகை இல்லை அஞ்சல் இல்லை.தொகுதி குறிப்பிட்ட தகவல் இல்லைகடவுச்சொல் கொடுக்கப்படவில்லைஇது சரியான பாதுகாப்பு சூழல் இல்லைகடவுச்சொல் மாற்றம் கைவிடப்பட்டது.கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டுள்ளது.கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டது. வேறொன்றை பயன்படுத்தவும்.கடவுச்சொல் மாற்றப்படவில்லைகடவுச்சொல்:அனுமதி இல்லை%sஐ மறு தட்டச்சு செய்புதிய %s%spassword மீண்டும் உள்ளிடவும்: புதிய STRESS கடவுச்சொல்லை மீண்டும் உள்ளிடவும்: புதிய UNIX கடவுச்சொல்லை மீண்டும் உள்ளிடவும்: பாதுகாப்பு சூழல் %s ஒதுக்கப்பட்டதுசேவை பிழைகடவுச்சொல் பொருந்தவில்லை.வெற்றிசிக்னல் கிடைக்கவில்லைகணினி பிழைகொடுக்கப்பட்ட மதிப்பு PAM dispatch ஆல் தவிர்க்கப்பட்ட வேண்டும்கடைசி புகுபதிவிலிருந்து %d புகுபதிவு முயற்சி தோல்வியடைந்தது.கடைசி புகுபதிவிலிருந்து %d புகுபதிவு முயற்சிகள் தோல்வியடைந்தன.கடைசி புகுபதிவிலிருந்து %d புகுபதிவு முயற்சி தோல்வியடைந்தன.'%s'க்கு பல புகுபதிவுகள் உள்ளன.அடைவு '%s'ஐ உருவாக்க மற்றும் துவக்க முடியவில்லை.%sக்கு சரியான சூழல் பெற முடியவில்லைதெரியாத PAM பிழைதெரியாத பிழைதெரியாத பயனர்பயனர் கணக்கு முடிவுற்றதுபயனர் சன்மானம் முடிவுற்றதுஉரிம தொகுதியை எடுக்க பயனருக்கு தெரியவில்லைஉறுதிப்படுத்தல் முரண்பாடு; கடவுச்சொல் மாற்றப்படவில்லைஎச்சரிக்கை: கடவுச்சொல் %d நாட்களில் முடிவுறும்எச்சரிக்கை: கடவுச்சொல் %d நாட்களில் முடிவுறும்எச்சரிக்கை: கடவுச்சொல் %d நாட்களில் முடிவுறும்உங்கள் புதிய கணக்கு வரவேற்கப்படுகிறீர்கள்!நீங்கள் வேறு பங்கு அல்லது நிலையை உள்ளிட வேண்டுமா?நீங்கள் உங்கள் கடவுச்சொல்லை உடனடியாக மாற்ற வேண்டும் (கடவுச்சொல் மூப்பாகிவிட்டது)நீங்கள் உங்கள் கடவுச்சொல்லை உடனடியாக மாற்ற வேண்டும் (ரூட் வலியுறுத்துகிறது)உங்களுக்கு %s அடைவில் அஞ்சல் உள்ளது.உங்களுக்கு அஞ்சல் உள்ளது.உங்களுக்கு %s அடைவில் புதிய அஞ்சல் உள்ளது.உங்களுக்கு புதிய அஞ்சல் உள்ளது.உங்களுக்கு %s அடைவில் அஞ்சல் இல்லை.உங்களுக்கு %s அடைவில் பழைய அஞ்சல் உள்ளது.உங்களுக்கு பழைய அஞ்சல் உள்ளது.நீங்கள் நீண்ட கடவுச்சொல்லை தேர்ந்தெடுக்க வேண்டும்உங்கள் கடவுச்சொல்லை மாற்ற சிறிது காத்திருக்க வேண்டும்உங்கள் கணக்கு முடிவுற்றது, உங்கள் கணினி நிர்வாகியை அணுகவும்எழுத்து வகை மாற்றங்கள் மட்டும்சில வடிவல் பயனர் பெயரை கொண்டுள்ளதுநீளமான ஒரு மோனோடோனிக் எழுத்துத் தொடரைக் கொண்டுள்ளதுநிறைய அதே எழுத்துக்கள் தொடர்ந்து கொண்டுள்ளதுபிழையான உரையாடல் (%d) PAMஐ ஆரம்பிக்க முடியவில்லை pam_set_item() செயலிழக்கப்பட்டது இது ஒரு palindromeஇது சுழலக்கூடியதுஇது பழையதைப் போல உள்ளதுஇது பழையதை ஒத்தே உள்ளதுஇது மிகவும் எளிதாக உள்ளதுநிலை:புகுபதிவு:login: failure forking: %mநினைவக ஒதுக்கீட்டில் பிழைபோதிய எழுத்து வகுப்புகள் இல்லைபங்கு:Linux-PAM-1.1.8/po/hi.gmo0000644000000000000000000003776512216527620011671 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %  2-58cU0Gu1p];I<JPV" (y ( t @!!NO"5"i"?>#T~#&#A#<$S$D%+[%N%?%J&?a&A&0&?'oT'C'E(N(u(Hg)3)&)1 */=*,m*E**d*!^+Y+J+F%,Il,e,z-1--"-&.<+.Eh.J.8.2/[R/ /)/%/00u131r02Z2&2"%3(H3gq3;34h456E6~6X77H8(8R82R9_9[9;A:c}::u;;+<gg<n<[>=.=<=&>,->#Z>7~>:>>??:/?5j????,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-01-21 12:02+0000 Last-Translator: kumarvimal Language-Team: Hindi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hi Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y %.*s से %.*s पर%s विफल: संकेत घेरा %d%s%s विफल: निकास कोड %d%s विफल: अनजान स्थिति 0x%x%s: खराब संख्या को --reset= में दिया गया %s: सभी उपयोक्ता को गैर शून्य में फिर सेट नहीं कर सकता है %s: अपरिचित विकल्प %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (मौजूदा) UNIX शब्दकूट: ...क्षमा करें, आपका समय समाप्त हो गया! ...समय समाप्त हो रहा है... पहुँच दिया गया (last access was %ld seconds ago).खाता %u विफल लॉगिन के कारण लॉकखाता अस्थायी रूप से लॉक (%ld seconds left)अनुप्रयोग के libpam फिर आह्वान जरूरीसत्यापन त्रुटिसत्यापन विफलतासत्यापन सूचना फिर हासिल नहीं किया जा सकता हैसत्यापन सेवा सत्यापन सूचना नहीं हासिल कर सकता हैसत्यापन सेवा उपयोक्ता श्रेय फिर हासिल नहीं कर सकता हैसत्यापन टोकन एजिंग निष्क्रियसत्यापन टोकन समाप्तसत्यापन टोकन अब वैध नहीं है; नया जरूरी हैसत्यापन टोकन लॉक व्यस्तसत्यापन टोकन मैनिपुलेशन त्रुटिखराब शब्दकूट: %sखराब मद pam_*_item() में भेजा गयाविशेष सत्र के लिए एक प्रविष्टि नहीं बना/हटा सकता हैSTRESS कूटशब्द को %s के लिए बदल रहा है.%s के लिए कूटशब्द बदल रहा हैरूपांतरक त्रुटिरूपांतरण घटना के प्रतीक्षारतनिर्देशिका '%s' बना रहा है.गंभीर त्रुटि - तत्काल छोड़ेंतयशुदा सुरक्षा संदर्भ %s नया स्ट्रेस शब्दकूट दें: नया UNIX शब्दकूट दें: सेवा मॉड्यूल में त्रुटिशब्दकूट सेवा के द्वारा प्राथमिक जांच पूरीमॉड्यूल लोड करने में विफलविफल जमावट उपयोक्ता श्रेयसेवा के लिए अधिकतम संख्या में फिर कोशिश करना समाप्त कर चुका हैसत्यापन आंकड़ा की पहुँच में अपर्याप्त श्रेयकुंजी निर्माण संदर्भ %s नियतअंतिम लॉगिन विफल:%s%s%sअंतिम लॉगिन:%s%s%sLogin Failures Latest failure From स्मृति बफर त्रुटिमॉड्यूल अनजान हैNIS शब्दकूट बदला नहीं जा सका.नया %s%spassword: भूमिका %s के लिए कोई तयशुदा प्रकार नहीं कोई मेल नहीं.कोई मॉड्यूल विशेष आंकड़ा मौजूद हैकोई कूटशब्द नहीं दिया गया हैएक वैध सुरक्षा संदर्भ नहींकूटशब्द परिवर्तन छोड़ा गया.शब्दकूट प्रयोग हो चूका है. दूसरा चुनें शब्दकूट को पहले ही बदला जा चुका है. दूसरा चुनें.शब्दकूट परिवर्तितशब्दकूट: अनुमति मनाहीफिर टाइप करें %sनया %s%spassword फिर टाइप करें: नया शब्दकूट फिर टाइप करें: नया UNIX शब्दकूट फिर टाइप करें: सुरक्षा संदर्भ %s नियतसेवा त्रुटिक्षमा करें, शब्दकूट नहीं मिलते हैं.सफलसंकेत नहीं मिलासिस्टम त्रुटिलौटाए मान को PAM डिस्पैच के द्वारा अनदेखा किया जाना चाहिए%d विफल लॉगिन प्रयास था अंतिम सफल लॉगिन के बाद.%d विफल लॉगिन प्रयास थे अंतिम सफल लॉगिन के बाद.%d विफल लॉगिन प्रयास थे अंतिम सफल लॉगिन के बाद.'%s' के लिए बहुत लॉगिन.निर्देशिका '%s' बनाने और आरंभ करने में असमर्थ.%s के लिए वैध संदर्भ पाने में असमर्थअनजान PAM त्रुटिअनजान त्रुटिअनजान उपयोक्ताउपयोक्ता खाता की अवधि समाप्त हो चुकी हैउपयोक्ता श्रेय समाप्तउपयोक्ता अंतर्निहित सत्यापन मॉड्यूल से परिचित नहीं हैंजांच गलत टाइप किया गया; शब्दकूट बदला गयाचेतावनी: आपका शब्दकूट %d दिन में समाप्त हो जायेगाचेतावनी: आपका शब्दकूट %d दिन में समाप्त हो जायेगाचेतावनी: आपका शब्दकूट %d दिनों में समाप्त हो जायेगानए खाता में आपका स्वागत है!क्या आप भिन्न भूमिका या स्तर दाखिल करना चाहेंगे?आपके लिए अपना शब्दकूट तत्काल बदलना जरूरी है (शब्दकूट एज्ड)आपके लिए अपना शब्दकूट तत्काल बदलना जरूरी है (रूट पुनर्बलित)आपके लिए %s फोल्डर में मेल है.आपके पास मेल है.आपके लिए %s फोल्डर में नया मेल है.आपके लिए नया मेल है.आपके पास %s फोल्डर में कोई मेल नहीं है.आपके लिए %s फोल्डर में पुराना मेल है.आपके पास पुराना मेल है.आपको जरूर एक लंबा शब्दकूट चुनना चाहिएआपको अपना शब्दकूट बदलने के लिए लंबी प्रतीक्षा करनी होगीआपका खाता समाप्त हो चुका है; कृपया अपने सिस्टम प्रशासक को संपर्क करेंस्थिति परिवर्तन सिर्फकुछ रूप में उपयोक्ता नाम समाहित करता हैसमान वर्ण का लम्बा अनुक्रम समाहित करता है कई समान वर्ण लगातार समाहित करता हैअनियमित बातचीत (%d) PAM को आरंभ करने में विफल pam_set_item() में विफल एक पालिनड्रोम हैघुमाया गया हैपुराने की तरह समान हैपुराने के बहुत समान हैबहुत सरल हैस्तर: लॉगिन:लॉगिन: विफल फोर्किंग: %mस्मृति आबंटन त्रुटिपर्याप्त वर्ण वर्ग नहींभूमिका: Linux-PAM-1.1.8/po/bal.po0000644000000000000000000003221412216527617011651 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Balochi \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bal\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/sq.po0000644000000000000000000003224512216527620011534 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Albanian (http://www.transifex.com/projects/p/fedora/language/" "sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sq\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/gu.po0000644000000000000000000005613712216527617011540 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ankit Patel , 2007-2008 # sweta , 2009-2010 # sweta , 2013 # sweta , 2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-15 12:16+0000\n" "Last-Translator: sweta \n" "Language-Team: Gujarati \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...સમય ચાલ્યો જઈ રહ્યો છે...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...માફ કરજો, તમારો સમય સમાપ્ત થયો!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "ક્ષતિયુક્ત વાર્તાલાપ (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "પાસવર્ડ: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "નવો %s%sપાસવર્ડ: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "નવો %s%sપાસવર્ડ ફરી લખો: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "માફ કરજો, પાસવર્ડો બંધબેસતા નથી." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s ને પુન:ટાઇપ કરો" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "પાસવર્ડ બદલાવનો અંત આવેલ છે." #: libpam/pam_item.c:311 msgid "login:" msgstr "પ્રવેશ:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "સફળતા" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "જટિલ ભૂલ - તુરંત બંધ કરો" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "મોડ્યુલ લાવવામાં નિષ્ફળ" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "સંજ્ઞા મળી નહિં" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "સેવા મોડ્યુલમાં ભૂલ" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "સિસ્ટમ ભૂલ" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "મેમરી બફર ભૂલ" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "પરવાનગી નામંજૂર" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "સત્તાધિકરણ નિષ્ફળતા" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "સત્તાધિકરણ માહિતી વાપરવા માટે અપૂરતી પરવાનગીઓ" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "સત્તાધિકરણ સેવા સત્તાધિકરણ જાણકારી મેળવી શકે નહિં" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "સત્તાધિકરણ મોડ્યુલથી વપરાશકર્તા અજ્ઞાત છે" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "સેવા માટે મહત્તમ પ્રયાસો કર્યા" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "સત્તાધિકરણ ટોકન લાંબા સમય સુધી માન્ય નથી; એક નવું જરૂરી છે" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "વપરાશકર્તા ખાતું નિવૃત્ત થયું" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "સ્પષ્ટ થયેલ સત્ર માટે પ્રવેશ બનાવી શકતા નથી/દૂર કરી શકતા નથી" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "સત્તાધિકરણ સેવા વપરાશકર્તા પરવાનગીઓ પ્રાપ્ત કરી શકતી નથી" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "વપરાશકર્તા પરવાનગીઓ નિવૃત્ત થઈ" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "વપરાશકર્તા પરવાનગીઓ સુયોજિત કરવામાં નિષ્ફળતા" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "કોઈ મોડ્યુલ લગતી માહિતી હાજર નથી" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item() ને ખરાબ વસ્તુ પસાર થઈ" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "વાર્તાલાપ ભૂલ" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "સત્તાધિકરણ ટોકન મેનીપ્યુલેશન ભૂલ" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "સત્તાધિકરણ જાણકારી પુનઃપ્રાપ્ત કરી શકાશે નહિં" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "સત્તાધિકરણ ટોકન તાળું વ્યસ્ત" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "સત્તાધિકરણ ટોકન વયમર્યાદા નિષ્ક્રિય કરાયેલ" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "પાસવર્ડ સેવા મારફતે પ્રાથમિક ચકાસણી નિષ્ફળ" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "પાછી મળતી કિંમત PAM ડિસ્પેચ દ્વારા અવગણવામાં આવવી જોઈએ" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "મોડ્યુલ અજ્ઞાત છે" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "સત્તાધિકરણ ટોકન નિવૃત્ત થયું" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "વાર્તાલાપ ઘટના માટે રાહ જોઈ રહ્યો છે" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "કાર્યક્રમને libpam ફરીથી બોલાવવાની જરૂર છે" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "અજ્ઞાત PAM ભૂલ" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "એ જૂના જેવો જ છે" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "મેમરી ફાળવણી ભૂલ" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "એ પેલીન્ડ્રોમ છે" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "કેસ ફેરફાર માત્ર" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "એ જૂના સાથે એકદમ સરખો છે" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "એ ખૂબ સાદો છે" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "એ ફેરવાયેલ છે" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "પૂરતા અક્ષર વર્ગો નથી" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "એકપછી એક ઘણા બધા સરખા અક્ષરોને સમાવે છે" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "મૉનોટોનિક અક્ષર ક્રમ ઘણો લાંબો સમાવે છે" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "અમુક ફોર્મમાં વપરાશકર્તા નામ ને સમાવે છે" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "કોઈ પાસવર્ડ પૂરો પડાયેલ નથી" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "પાસવર્ડ બદલાયેલ નથી" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ખરાબ પાસવર્ડ: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s નિષ્ફળ: બહાર નીકળ્યાનો કોડ %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s નિષ્ફળ: મળેલ સંકેત %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s નિષ્ફળ: અજ્ઞાત પરિસ્થિતિ 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s તરફથી" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s પર" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "છેલ્લો પ્રવેશ:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "તમારા નવા ખાતામાં તમારું સ્વાગત છે!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "છેલ્લો નિષ્ફળ થયેલ પ્રવેશ:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "છેલ્લે સફળ પ્રવેશ સુધી પ્રવેશનો પ્રયત્ન કરવામાં %d નિષ્ફળ થયેલ હતુ." msgstr[1] "છેલ્લે સફળ પ્રવેશ સુધી પ્રવેશનો પ્રયત્નો કરવામાં %d નિષ્ફળ થયેલ હતુ." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "છેલ્લે સફળ પ્રવેશ સુધી પ્રવેશનાં પ્રયત્નો કરવામાં %d નિષ્ફળ થયેલ હતુ." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' માટે ઘણા બધા પ્રવેશો." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "કોઈ મેઈલ નથી." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "તમારી પાસે નવો મેઈલ છે." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "તમારી પાસે જૂનો મેઈલ છે." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "તમારી પાસે મેઈલ છે." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "તમારી પાસે ફોલ્ડર %s માં કોઈ મેઈલ નથી." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "તમારી પાસે ફોલ્ડર %s માં નવો મેઈલ છે." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "તમારી પાસે ફોલ્ડર %s માં જૂનો મેઈલ છે." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "તમારી પાસે ફોલ્ડર %s માં મેઈલ છે." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "ડિરેક્ટરી '%s' બનાવી રહ્યા છીએ." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "ડિરેક્ટરી '%s' ને શરૂ કરવામાં અને બનાવવામાં અસમર્થ." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "પાસવર્ડ પહેલાથી જ વપરાઈ ગયેલ છે. બીજો પસંદ કરો." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "પાસવર્ડને વાપરી દેવામાં આવ્યો છે." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "મૂળભૂત સુરક્ષા સંદર્ભ %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "શું તમે અલગ ભૂમિકા કે સ્તર દાખલ કરવા ઈચ્છો છો?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ભૂમિકા:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "ભૂમિકા %s માટે કોઈ મૂળભૂત પ્રકાર નથી\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "સ્તર:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "માન્ય સુરક્ષા સંદર્ભ નથી" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s માટે માન્ય સંદર્ભ મેળવવામાં અસમર્થ" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "સુરક્ષા સંદર્ભ %s સોંપાયેલ" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "કી બનાવટ સંદર્ભ %s સોંપાયેલ" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM નો આરંભ કરવામાં નિષ્ફળ\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() કરવામાં નિષ્ફળ\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "પ્રવેશ: ફોર્કમાં નિષ્ફળ: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "STRESS પાસવર્ડ %s માટે બદલો." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "નવો STRESS પાસવર્ડ દાખલ કરો: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "નવો STRESS પાસવર્ડ પુનઃલખો: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "ચકાસણી ખોટી-રીતે લખાઈ; પાસવર્ડ બદલાયેલ નથી" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "ખાતુ થોડા વખત માટે તાળુ મારેલ છે (%ld સેકંડો ડાબે)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u પ્રવેશો ને નિષ્ફળ કરે છે તે દરમ્યાન ખાતાને તાળુ મારેલ છે" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "સત્તાધિકરણ ભૂલ" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "સેવા ભૂલ" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "અજ્ઞાત વપરાશકર્તા" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "અજ્ઞાત ભૂલ" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset= ને ખોટો નંબર અપાયેલ છે\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: નહિં ઓળખાતો વિકલ્પ %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: બધા વપરાશકર્તાઓને બિન-શૂન્યમાં પુનઃસુયોજિત કરી શકતા નથી\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "પ્રવેશ એ તે માંથી તાજેતરની નિષ્ફળતાને નિષ્ફળ કરે છે\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "પ્રવેશની મંજૂરી આપેલ છે (છેલ્લો પ્રવેશ એ %ld સેકંડો પહેલા હતો)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "તમારું ખાતું નિવૃત્ત થઈ ગયું છે; મહેરબાની કરીને તમારા સિસ્ટમ સંચાલકનો સંપર્ક કરો" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "તમારે તમારો પાસવર્ડ તુરંત જ બદલવાની જરૂર છે (root દબાણ કરેલ)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "તમારે તમારો પાસવર્ડ તુરંત જ બદલવાની જરૂર છે (પાસવર્ડ વયમર્યાદિત કરાયેલ)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "ચેતવણી: તમારો પાસવર્ડ %d દિવસમાં નિવૃત્ત થઈ જશે" msgstr[1] "ચેતવણી: તમારો પાસવર્ડ %d દિવસોમાં નિવૃત્ત થઈ જશે" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "ચેતવણી: તમારો પાસવર્ડ %d દિવસોમાં નિવૃત્ત થઈ જશે" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS પાસવર્ડ બદલી શક્યા નહિં." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "તમારે લાંબો પાસવર્ડ જ પસંદ કરવો જોઈએ" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s માટે પાસવર્ડ બદલવાનું." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(વર્તમાન) UNIX પાસવર્ડ: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "તમારો પાસવર્ડ બદલવા માટે તમારે લાંબો સમય રાહ જોવી જ પડશે" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "નવો UNIX પાસવર્ડ દાખલ કરો: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "નવો UNIX પાસવર્ડ ફરીથી લખો: " Linux-PAM-1.1.8/po/POTFILES.in0000644000000000000000000000601212160065211012306 00000000000000./libpamc/pamc_client.c ./libpamc/pamc_converse.c ./libpamc/pamc_load.c ./libpam_misc/help_env.c ./libpam_misc/misc_conv.c ./libpam/pam_account.c ./libpam/pam_audit.c ./libpam/pam_auth.c ./libpam/pam_data.c ./libpam/pam_delay.c ./libpam/pam_dispatch.c ./libpam/pam_dynamic.c ./libpam/pam_end.c ./libpam/pam_env.c ./libpam/pam_get_authtok.c ./libpam/pam_handlers.c ./libpam/pam_item.c ./libpam/pam_misc.c ./libpam/pam_modutil_cleanup.c ./libpam/pam_modutil_getgrgid.c ./libpam/pam_modutil_getgrnam.c ./libpam/pam_modutil_getlogin.c ./libpam/pam_modutil_getpwnam.c ./libpam/pam_modutil_getpwuid.c ./libpam/pam_modutil_getspnam.c ./libpam/pam_modutil_ingroup.c ./libpam/pam_modutil_ioloop.c ./libpam/pam_password.c ./libpam/pam_prelude.c ./libpam/pam_session.c ./libpam/pam_start.c ./libpam/pam_static.c ./libpam/pam_strerror.c ./libpam/pam_syslog.c ./libpam/pam_vprompt.c ./modules/pam_access/pam_access.c ./modules/pam_cracklib/pam_cracklib.c ./modules/pam_debug/pam_debug.c ./modules/pam_deny/pam_deny.c ./modules/pam_echo/pam_echo.c ./modules/pam_env/pam_env.c ./modules/pam_exec/pam_exec.c ./modules/pam_faildelay/pam_faildelay.c ./modules/pam_filter/pam_filter.c ./modules/pam_filter/upperLOWER/upperLOWER.c ./modules/pam_ftp/pam_ftp.c ./modules/pam_group/pam_group.c ./modules/pam_issue/pam_issue.c ./modules/pam_keyinit/pam_keyinit.c ./modules/pam_lastlog/pam_lastlog.c ./modules/pam_limits/pam_limits.c ./modules/pam_listfile/pam_listfile.c ./modules/pam_localuser/pam_localuser.c ./modules/pam_loginuid/pam_loginuid.c ./modules/pam_mail/pam_mail.c ./modules/pam_mkhomedir/pam_mkhomedir.c ./modules/pam_motd/pam_motd.c ./modules/pam_namespace/md5.c ./modules/pam_namespace/pam_namespace.c ./modules/pam_nologin/pam_nologin.c ./modules/pam_permit/pam_permit.c ./modules/pam_pwhistory/opasswd.c ./modules/pam_pwhistory/pam_pwhistory.c ./modules/pam_rhosts/pam_rhosts.c ./modules/pam_rootok/pam_rootok.c ./modules/pam_securetty/pam_securetty.c ./modules/pam_selinux/pam_selinux.c ./modules/pam_selinux/pam_selinux_check.c ./modules/pam_sepermit/pam_sepermit.c ./modules/pam_shells/pam_shells.c ./modules/pam_stress/pam_stress.c ./modules/pam_succeed_if/pam_succeed_if.c ./modules/pam_tally/pam_tally_app.c ./modules/pam_tally/pam_tally.c ./modules/pam_tally2/pam_tally2_app.c ./modules/pam_tally2/pam_tally2.c ./modules/pam_time/pam_time.c ./modules/pam_timestamp/pam_timestamp.c ./modules/pam_timestamp/pam_timestamp_check.c ./modules/pam_tty_audit/pam_tty_audit.c ./modules/pam_umask/pam_umask.c ./modules/pam_unix/bigcrypt.c ./modules/pam_unix/bigcrypt_main.c ./modules/pam_unix/md5_broken.c ./modules/pam_unix/md5.c ./modules/pam_unix/md5_crypt.c ./modules/pam_unix/md5_good.c ./modules/pam_unix/pam_unix_acct.c ./modules/pam_unix/pam_unix_auth.c ./modules/pam_unix/pam_unix_passwd.c ./modules/pam_unix/pam_unix_sess.c ./modules/pam_unix/passverify.c ./modules/pam_unix/support.c ./modules/pam_unix/unix_chkpwd.c ./modules/pam_unix/yppasswd_xdr.c ./modules/pam_userdb/pam_userdb.c ./modules/pam_warn/pam_warn.c ./modules/pam_wheel/pam_wheel.c ./modules/pam_xauth/pam_xauth.c Linux-PAM-1.1.8/po/remove-potcdate.sin0000644000000000000000000000066012160065211014345 00000000000000# 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 } Linux-PAM-1.1.8/po/ja.gmo0000644000000000000000000003135012216527620011643 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % +1O4oGG uT+H0OyJK` p$}9E0" -S f ' !!2!'R!Rz!,!$!"*/"$Z"6"6":":(#'c#K#0#6$3?$Bs$@$"$%F4%!{%%7%%>&Q&0p&-&?&0'6@'jw'-'($!(F(;e(=(=(;)Y)'o))))J)[*^z*+*@+?F++++<+-,?2,Hr,@,B,*?-7j-S-V-,M.z.5.$./.2!/!T/9v/E/l/6c0603061<1%Q1$w1?1101#2B2 U2 `2*n2!2!2 2,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-05-07 12:44+0000 Last-Translator: Jiro Matsuzawa Language-Team: Japanese MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ja Plural-Forms: nplurals=1; plural=0; %Y/%m/%d (%a) %H:%M:%S %Z %.*sから開始日時 %.*s%s 失敗: シグナルをキャッチ %d%s%s 失敗: 終了コード %d%s 失敗: 不明な状態 0x%x%s: 不正番号が--reset=に与えられました %s: すべてのユーザーを非ゼロにリセットできません %s: 未認識オプション%s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] 現在の UNIX パスワード:...時間切れです。 ...時間が切れかかっています... アクセスを許可 (最後のアクセスは %ld 秒前でした)%u のログイン失敗の理由で アカウントはロックされましたアカウントは一時的にロックされています (残り %ld 秒)アプリケーションはlibpamを再び呼び出す必要があります認証エラー認証失敗認証情報を回復できません認証サービスが認証情報を検索できません認証サービスがユーザー資格認定を検索できません認証トークンエージングが無効です認証トークンの有効期限切れです認証トークンはもはや有効ではありません。新しい認証トークンが必要です認証トークンをロック中です認証トークン操作エラーよくないパスワード: %spam_*_item()に渡された不正項目指定したセッションに対するエントリを作成/削除できません%s 用の STRESS パスワードを変更中%s 用にパスワードを変更中会話エラー会話はイベントを待っていますディレクトリ '%s' を作成中致命的エラー - 直ちに中止してくださいデフォルトセキュリティコンテキスト%s 新しいSTRESSパスワードを入力してください:新しい UNIX パスワードを入力してください:サービスモジュールのエラーパスワードサービスによる予備チェックに失敗しましたモジュールのロードに失敗しましたユーザー資格認定の設定に失敗しましたサービスの最大試行回数に達しました認証データにアクセスする資格認定がありませんキー作成コンテキスト %s が割り当てられました最後の失敗ログイン:%s%s%s最終ログイン:%s%s%sログイン 失敗。最後の失敗は 以下で発生 メモリーバッファエラーモジュールが不明ですNIS パスワードを変更できませんでした。新しい%s%sパスワード:ロール %s にはデフォルトタイプがありません メールがありません。モジュール固有データがありませんパスワードが与えられていません有効なセキュリティコンテキストでありませんパスワードの変更は放棄されましたパスワードはすでに使用されています。パスワードはすでに使用されています。 別のパスワードを選択してください。パスワードが変更されていませんパスワード:拒否されたパーミッション%s を再入力して下さい新しい%s%sパスワードを再入力してください:新しいSTRESSパスワードを再入力してください:新しい UNIX パスワードを再入力してください:割り当てられたセキュリティコンテキスト%sサービスエラーパスワードが一致しません。成功記号が見つかりませんシステムエラー戻り値は PAM タスク指名により無視する必要があります最後の正しいログインの後に %d 回の失敗ログインの試行があります最後の正しいログインの後に %d 回の失敗ログインの試行があります。'%s'のログイン数が多すぎます。ディレクトリ %s を作成して初期化できません。%s の為の有効なコンテキストを取得できません不明な PAM エラー不明なエラー不明なユーザーユーザーアカウントの有効期限が切れましたユーザー資格認定の有効期限切れ基礎となる認証モジュールを知らないユーザーミスタイプの確認、パスワードが変更されていません警告: パスワードは%d日で有効期限が切れます。警告: パスワードは %d 日で有効期限が切れます。新しいアカウントへようこそ。異なるロール又はレベルを入力しますか?パスワードを直ちに変更する必要があります(古いパスワード)パスワードを直ちに変更する必要があります(強制されたルート)フォルダ%sにメールがあります。メールがあります。フォルダ%sに新しいメールがあります。新しいメールがあります。フォルダ%sにメールがありません。フォルダ%sに古いメールがあります。古いメールがあります。長いパスワードを選択する必要がありますパスワードを変更するには長く待つ必要がありますアカウントの有効期限が切れました。システム管理者にお問い合わせください。大文字小文字を変えただけのパスワードなんらかの形式のユーザー名を含みます単調な文字列が数多く含まれています連続的な同一文字が多く含まれ過ぎです誤った会話(%d) PAMの初期化に失敗しました pam_set_item()に失敗しました 前後どちらから読んでも同じパスワードです。回転していますパスワードが古いものと同じです。古いものと似ています簡単すぎますレベル:ログイン:ログイン: いまいましい失敗: %mメモリー割り当てエラー文字クラスが不十分ですロール:Linux-PAM-1.1.8/po/or.po0000644000000000000000000006123712216527620011534 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Manoj Kumar Giri , 2008-2009,2012 # Manoj Kumar Giri , 2013 # Subhransu Behera , 2007 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-15 14:35+0000\n" "Last-Translator: Manoj Kumar Giri \n" "Language-Team: Oriya (http://www.transifex.com/projects/p/fedora/language/" "or/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: or\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...ସମୟ ସମାପ୍ତ ହେଉଛି...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...କ୍ଷମା କରିବେ, ଆପଣଙ୍କ ସମୟ ସମାପ୍ତ ହୋଇଯାଇଛି!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "ତୃଟିପୂର୍ଣ୍ଣ କଥୋପକଥନ (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "ପ୍ରବେଶ ସଙ୍କେତ: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "ନୂତନ %s%s ପ୍ରବେଶ ସଙ୍କେତ: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "ନୂତନ %s%s ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "କ୍ଷମା କରିବେ, ପ୍ରବେଶ ସଙ୍କେତ ମିଶୁ ନାହିଁ।" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%sକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "ପ୍ରବେଶ ସଙ୍କେତ ପରିବର୍ତ୍ତିନକୁ ପ୍ରତ୍ୟାଖାନ କରାଯାଇଛି।" #: libpam/pam_item.c:311 msgid "login:" msgstr "ଲଗଇନ:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "ସଫଳତା" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "ଗୁରୁତର ତୃଟି - ଏହା ବିଷୟରେ ଶୀଘ୍ର ଜଣାନ୍ତୁ" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "ଏକକାଂଶକୁ ଧାରଣ କରିବାରେ ବିଫଳ" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "ପ୍ରତୀକ ମିଳିଲା ନାହିଁ" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "ସେବା ଏକକାଂଶରେ ତୃଟି" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "ତନ୍ତ୍ର ତୃଟି" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "ସ୍ମୃତି ସଞ୍ଚୟ ତୃଟି" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "ଅନୁମତି ଅସ୍ବୀକୃତ" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "ବୈଧିକରଣ ବିଫଳ" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "ବୈଧିକରଣ ତଥ୍ଯକୁ ଅଭିଗମ କରିବା ପାଇଁ ଅଯେଥଷ୍ଟ ପ୍ରମାଣ ପତ୍ର" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "ବୈଧିକରଣ ସେବା ବୈଧିକରଣ ସୂଚନା ପୁନରୁଦ୍ଧାର କରିପାରିବ ନାହିଁ" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "ନିମ୍ନଲିଖିତ ବୈଧିକରଣ ଏକକାଂଶକୁ ଜଣା ନ ଥିବା ଚାଳକ" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "ସେବା ପାଇଁ ସର୍ବାଧିକ ସଂଖ୍ଯକ ପୁନଃପ୍ରଚେଷ୍ଟା ପୂର୍ଣ୍ଣ ମାତ୍ରାରେ ସମାପ୍ତ ହୋଇଯାଇଛି" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "ବୈଧିକରଣ ଟୋକନ ଆଉ ଏବେ ବୈଧ ନୁହେଁ; ଗୋଟିଏ ନୂତନ ଟୋକନ ଆବଶ୍ଯକ" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "ଚାଳକ ହିସାବ ଖାତା ଅଚଳ ହୋଇଯାଇଛି" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "ଉଲ୍ଲେଖିତ ଅଧିବେଶନ ପାଇଁ ଗୋଟିଏ ପ୍ରବିଷ୍ଟି ପ୍ରସ୍ତୁତ/ଅପସାରଣ କରିପାରିବ ନାହିଁ" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "ବୈଧିକରଣ ସେବା ଚାଳକ ପ୍ରମାଣ ପତ୍ର ମାନଙ୍କୁ ପୁନରୁଦ୍ଧାର କରିପାରିବ ନାହିଁ" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "ଚାଳକ ପ୍ରମାଣ ପତ୍ର ଅଚଳ ହୋଇଯାଇଛି" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "ଚାଳକ ପ୍ରମାଣ ପତ୍ର ବିନ୍ଯାସ କରିବାରେ ବିଫଳ" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "କୌଣସି ଏକକାଂଶ ନିର୍ଦ୍ଦିଷ୍ଟ ତଥ୍ଯ ନାହିଁ" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "ଖରାପ ବସ୍ତୁକୁ pam_*_item() କୁ ପଠାଯାଇଛି" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "କଥୋପକଥନ ତୃଟି" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "ବୈଧିକରଣ ଟୋକନ ବ୍ଯବହାର କୌଶଳ ସାଧନରେ ତୃଟି" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "ବୈଧିକରଣ ସୂଚନା ପୁନର୍ଲାଭ କରିପାରିବ ନାହିଁ" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "ବୈଧିକରଣ ଟୋକନ ତାଲା ବ୍ଯସ୍ତ ଅଛି" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "ବୈଧିକରଣ ଟୋକନ କାଳ ବର୍ଦ୍ଧନ ପ୍ରକ୍ରିୟାକୁ ନିଷ୍କ୍ରିୟ କରାଯାଇଛି" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "ପ୍ରବେଶ ସଙ୍କେତ ସେବା ଦ୍ବାରା ପ୍ରାଥମିକ ପରୀକ୍ଷଣ ବିଫଳ" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "ଫେରସ୍ତ ମୂଲ୍ଯକୁ PAM ପ୍ରେରଣ ଦ୍ବାରା ଆଗ୍ରହ୍ଯ କରାଯାଇଛି" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "ଏକକାଂଶଟି ଅଜଣା ଅଟେ" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "ବୈଧିକରଣ ଟୋକନ ଅଚଳ ହୋଇଯାଇଛି" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "କଥୋପକଥନ ଘଟଣା ପାଇଁ ଅପେକ୍ଷା କରୁଅଛି" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "ପ୍ରୟୋଗ libpam କୁ ପୁନର୍ବାର ଆହ୍ବାନ କରିବା ଦରକାର" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "ଅଜଣା PAM ତୃଟି" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "ପୁରୁଣା ପ୍ରବେଶ ସଙ୍କେତ ସହିତ ଏହା ସମାନ ଅଟେ" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "ସ୍ମୃତିସ୍ଥାନ ବଣ୍ଟନ ତ୍ରୁଟି" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "ପ୍ରବେଶ ସଙ୍କେତଟି ଗୋଟିଏ ପାଲିନଡ୍ରୋମ ଅଟେ" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "କେବଳ ଅକ୍ଷର ପ୍ରକାର ପରିବର୍ତ୍ତିତ ହୋଇଥାଏ" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ଏହା ପୂର୍ବ ପ୍ରବେଶ ସଙ୍କେତ ସହିତ ବହୁତ ସମାନ ଅଟେ" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "ଏହା ଅତି ସହଜ ଅଟେ" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "ଏହା ଘୂର୍ଣ୍ଣୟମାନ ଅଟେ" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "ଯଥେଷ୍ଟ ବର୍ଣ୍ଣ ଶ୍ରେଣୀ ନାହିଁ" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "ଅତ୍ୟଧିକ ସମାନ ଅକ୍ଷରକୁ ଲଗାତାର ଧାରଣ କରିଥାଏ" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "ନିରସ ବର୍ଣ୍ଣର ବଡ଼ କ୍ରମ ଧାରଣ କରିଅଛି" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "ଚାଳକ ନାମକୁ କୌଣସି ଉପାୟରେ ଧାରଣ କରିଥାଏ" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "କୌଣସି ପ୍ରବେଶ ସଙ୍କେତ ପ୍ରଦାନ କରାଯାଇ ନାହିଁ" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "ପ୍ରବେଶ ସଙ୍କେତ ଅପରିବର୍ତ୍ତିତ ଅଛି" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ଖରାପ ପ୍ରବେଶ ସଙ୍କେତ: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s ବିଫଳ: %d ସଙ୍କେତରୁ ପ୍ରସ୍ଥାନ କରୁଅଛି" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s ବିଫଳ: %d%s ସଙ୍କେତ ପାଇଲା" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s ବିଫଳ: ଅଜଣା ଅବସ୍ଥିତି 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s ରୁ" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s ରେ" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "ଅନ୍ତିମ ଲଗଇନ:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "ଆପଣଙ୍କ ନୂତନ ଖାତାରେ ଆପଣଙ୍କ ସ୍ବାଗତ!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "ଅନ୍ତିମ ବିଫଳ ଲଗଇନ:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "ଅନ୍ତିମ ସଫଳ ଲଗଇନ ପରଠାରୁ %d ଟି ବିଫଳ ଲଗଇନ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି।" msgstr[1] "ଅନ୍ତିମ ସଫଳ ଲଗଇନ ପରଠାରୁ %d ଟି ବିଫଳ ଲଗଇନ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି।" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "ଅନ୍ତିମ ସଫଳ ଲଗଇନ ପରଠାରୁ %d ଟି ବିଫଳ ଲଗଇନ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି।" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' ପାଇଁ ଅତ୍ଯଧିକ ସଂଖ୍ଯକ ଲଗଇନ।" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "କୌଣସି ଚିଠି ନାହିଁ।" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "ଆପଣଙ୍କ ପାଇଁ ଗୋଟିଏ ନୂଆ ଚିଠି ଆସିଛି।" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "ଆପଣଙ୍କ ନିକଟରେ ଗୋଟିଏ ପୁରୁଣା ଚିଠି ଅଛି।" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "ଆପଣଙ୍କ ନିକଟରେ ଚିଠି ଅଛି।" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "ଆପଣଙ୍କ ନିକଟରେ %s ଫୋଲଡରରେ କୌଣସି ଚିଠି ନାହିଁ।" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "ଆପଣଙ୍କ ନିକଟରେ %s ଫୋଲଡରରେ ନୂଆ ଚିଠି ଅଛି।" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "ଆପଣଙ୍କ ନିକଟରେ %s ଫୋଲଡରରେ ପୁରୁଣା ଚିଠି ଅଛି।" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "ଆପଣଙ୍କ ନିକଟରେ %s ଫୋଲଡରରେ ଚିଠି ଅଛି।" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "ଡ଼ିରେକ୍ଟୋରୀ '%s' ନିର୍ମାଣ କରୁଅଛି." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "ଡ଼ିରେକ୍ଟୋରୀ '%s'କୁ ନିର୍ମାଣ ଏବଂ ପ୍ରାରମ୍ଭ କରିବାରେ ଅସମର୍ଥ।" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "ପ୍ରବେଶ ସଙ୍କେତଟି ପୂର୍ବରୁ ବ୍ଯବହୃତ ହେଉଛି। ଅନ୍ଯ ଗୋଟିଏ ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରନ୍ତୁ।" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "ପ୍ରବେଶ ସଙ୍କେତକୁ ପୂର୍ବରୁ ବ୍ୟବହାର କରାଯାଇଛି।" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "ପୂର୍ବନିର୍ଦ୍ଧାରିତ ସୁରକ୍ଷା ପ୍ରସଙ୍ଗ %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "ଆପଣ ଭିନ୍ନ ଏକ ଭୂମିକା କିମ୍ବା ସ୍ତର ଭରଣ କରିବା ପାଇଁ ଚାହୁଁଛନ୍ତି କି?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ଭୂମିକା:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "ଭୂମିକା %s ପାଇଁ କୌଣସି ପୂର୍ବନିର୍ଦ୍ଧାରିତ ପ୍ରକାର ନାହିଁ \n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "ସ୍ତର:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "ଏହା ଗୋଟିଏ ବୈଧ ସୁରକ୍ଷା ପ୍ରସଙ୍ଗ ନୁହେଁ" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s ପାଇଁ ବୈଧ ପ୍ରସଙ୍ଗ ପାଇବାରେ ଅସମର୍ଥ" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "%s ସୁରକ୍ଷା ପ୍ରସଙ୍ଗ ନ୍ଯସ୍ତ କରାଯାଇଛି" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "କି ନିର୍ମାଣ୍ଣ ପ୍ରସଙ୍ଗ %s ନ୍ଯସ୍ତ କରାଯାଇଛି" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM କୁ ପ୍ରାରମ୍ଭିକୃତ କରିବାରେ ବିଫଳ\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() କରିବାରେ ବିଫଳ\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "ଲଗଇନ: fork କରିବାରେ ବିଫଳ: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s ପାଇଁ STRESS ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଉଛି." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "ନୂତନ STRESS ପ୍ରବେଶ ସଙ୍କେତ ଭରଣ କରନ୍ତୁ: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "ନୂତନ STRESS ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "ଯାଞ୍ଚକରଣ ସମୟରେ ଭୂଲ ଟାଇପ କରିଛନ୍ତି, ପ୍ରବେଶ ସଙ୍କେତଟି ବଦଳି ନାହିଁ" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "ଖାତା ଅସ୍ଥୟୀ ଭାବରେ ଅପରିବର୍ତ୍ତିତ ହୋଇଛି (%ld ସେକଣ୍ଡ ବଳିଅଛି)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u ବିଫଳ ଲଗଇନ କାରଣରୁ ଖାତା ଅପରିବର୍ତ୍ତନୀୟ ହୋଇଯାଇଛି" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "ବୈଧିକରଣ ତୃଟି" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "ସେବା ତୃଟି" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "ଅଜଣା ଚାଳକ" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "ଅଜଣା ତୃଟି" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset= ପାଇଁ ଖରାପ ସଂଖ୍ଯା ଦିଆଯାଇଛି\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: ଅଚିହ୍ନିତ ବିକଳ୍ପ %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: ସମସ୍ତ ଚାଳକ ମାନଙ୍କୁ ଶୂନ୍ଯ ବିହୀନ ଭାବରେ ପୁନର୍ବାର ବିନ୍ଯାସ କରିପାରିବ ନାହିଁ\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "ଲଗଇନ ବିଫଳତାର ନୂତନତମ ବିଫଳତା ରୁ\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "ଅଭିଗମ୍ୟତା ଗ୍ରହଣୀୟ ହୋଇଛି (ଅନ୍ତିମ ଅଭିଗମ୍ୟତା %ld ସେକଣ୍ଡ ପୂର୍ବରୁ)।" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "ଆପଣଙ୍କର ଖାତା ଅଚଳ ହୋଇଯାଇଛି; ଦୟାକରି ଆପଣଙ୍କ ତନ୍ତ୍ର ପ୍ରଶାସକଙ୍କ ସହିତ ଯୋଗାଯୋଗ କରନ୍ତୁ" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "ଆପଣ ଆପଣଙ୍କର ପ୍ରବେଶ ସଙ୍କେତକୁ ଯଥାଶୀଘ୍ର ବଦଳାଇବା ଆବଶ୍ଯକ (ରୁଟ ହେବା ବାଧ୍ଯତାମୂଳକ)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" "ଆପଣ ଆପଣଙ୍କର ପ୍ରବେଶ ସଙ୍କେତକୁ ଯଥାଶୀଘ୍ର ବଦଳାଇବା ଆବଶ୍ଯକ (ପ୍ରବେଶ ସଙ୍କେତ ବହୁତ ପୁରୁଣା ହୋଇଯାଇଛି)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "ଚେତାବନୀ: ଆପଣଙ୍କ ପ୍ରବେଶ ସଙ୍କେତ %d ଦିନରେ ଅକାମି ହୋଇଯିବ" msgstr[1] "ଚେତାବନୀ: ଆପଣଙ୍କ ପ୍ରବେଶ ସଙ୍କେତ %d ଦିନରେ ଅକାମି ହୋଇଯିବ" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "ଚେତାବନୀ: ଆପଣଙ୍କ ପ୍ରବେଶ ସଙ୍କେତ %d ଦିନରେ ଅକାମି ହୋଇଯିବ" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଇ ହେଲା ନାହିଁ।" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "ଆପଣ ଗୋଟିଏ ଲମ୍ବା ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରିବା ଉଚିତ" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s ପାଇଁ ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଉଛି." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(ବର୍ତ୍ତମାନ ଥିବା) UNIX ପ୍ରବେଶ ସଙ୍କେତ: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଇବା ପାଇଁ ଆପଣ ଅଧିକ ସମୟ ଅପେକ୍ଷା କରିବା ଉଚିତ" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "ନୂତନ UNIX ପ୍ରବେଶ ସଙ୍କେତ ଭରଣ କରନ୍ତୁ: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "ନୂତନ UNIX ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: " Linux-PAM-1.1.8/po/uk.gmo0000644000000000000000000003576712216527620011710 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %3 <5G+}3:z1E&7>&vpw d D )0!)Z!X!!hc"S"< #[]#P#Q $\$J|$k$)3%]%(y%4%+%?&2C&/v&-&+&V'7W'G't'`L(H(2(!))NK))))4)*E7*}*8*(*6*+-+5Y+O+ +,!,$1,1V,3,1,7,&-7B- z-"--t-=.+0/0[1R]1#11'1L24i2V2J2@3O.4J~4B4u 5p5:5.6CK6%6B6E6&>78e7O77+8=8c8Za9'959:9:U:+j:3:: ::5 ;^B;K; ;,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-12-12 17:39+0000 Last-Translator: Yuri Chornoivan Language-Team: Ukrainian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: uk Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); %a %b %e %H:%M:%S %Z %Y з %.*s на %.*sПомилка %s: отримано сигнал %d%sПомилка %s: коди виходу %dПомилка %s: невідомий стан 0x%x%s: вказано помилкове число --reset= %s: не вдається відновити ненульове значення для всіх користувачів %s: нерозпізнано параметр %s %s: [--file назва-файла-користувача-root] [--user ім'я користувача] [--reset[=n]] [--quiet] %s: [-f назва-файла-користувача-root] [--file назва-файла-користувача-root] [-u користувач] [--user користувач] [-r] [--reset[=n]] [--quiet] (поточний) пароль UNIX: ...Вибачте, ваш час закінчився! ...Час закінчується... Надано доступ (остання спроба доступу сталася %ld секунд тому).Обліковий запис заблоковано через %u помилок під час спроби входуОбліковий запис тимчасово заблоковано (ще на %ld секунд)Програмі потрібно знов викликати libpamПомилка розпізнаванняПомилка розпізнаванняНе вдається відновити інформацію розпізнаванняСлужбі розпізнавання не вдалося отримати інформацію щодо розпізнаванняСлужба розпізнавання не може отримати права користувачаЗастарівання лексеми розпізнавання вимкненоЗастаріла лексема розпізнаванняЛексема розпізнавання вже не чинна; потрібна новаЛексему розпізнавання заблоковано, зайнятоПомилка маніпуляції лексемою розпізнаванняПОГАНИЙ ПАРОЛЬ: %sНеправильний елемент передано до pam_*_item()Не вдається створити / вилучити запис для вказаного сеансуЗміна пароля STRESS для %s.Зміна пароля %s.Помилка обміну данимиОбмін даними очікує на подіюСтворення каталогу «%s».Критична помилка - негайна зупинкаТиповий контекст безпеки %s Введіть новий пароль STRESS: Введіть новий пароль UNIX: Помилка в модулі службиНевдача попередньої перевірки службою паролівНе вдалося завантажити модульПомилка встановлення прав користувачаВикористано максимальну кількість дозволених спроб для службиНедостатньо прав для доступу до даних розпізнаванняПризначено контекст створення ключів %sОстанній невдалий вхід: %s%s%sОстанній вхід: %s%s%sКористувач Помилок Остання помилка З Помилка буфера пам'ятіНевідомий модульНе вдалося змінити пароль NIS.Новий пароль %s%s:Для ролі %s не визначено типового типу Немає пошти.Немає даних для певних модулівПароль не встановленоНепридатний контекст безпекиЗміну пароля перервано.Пароль вже використовувався.Цей пароль вже використано. Виберіть інший.Пароль не зміненоПароль: Доступ забороненоПовторне введення %sПовторіть новий пароль %s%s: Повторіть новий пароль STRESS: Повторіть новий пароль UNIX: Призначено контекст безпеки %sПомилка службиВибачте, паролі не збігаються.УспіхСимвол не знайденоСистемна помилкаПовернуте значення має бути проігноровано засобом розподілу PAMПісля останнього успішного входу було виконано %d спробу входу, яка завершилася помилкою.Після останнього успішного входу було виконано %d спроби входу, які завершилися помилками.Після останнього успішного входу було виконано %d спроб входу, які завершилися помилками.Після останнього успішного входу було виконано %d спроби входу, які завершилися помилками.Забагато входів в для «%s».Не вдалося створити і ініціалізувати каталог «%s».Не вдалося отримати коректний контекст для %sНевідома помилка PAMНевідома помилкаНевідомий користувачОбліковий запис користувача вже застарівПрава користувача застарілиНевідомий користувач для модуля розпізнаванняПеревірку не пройдено; пароль не зміненоПопередження: ваш пароль застаріє за %d деньПопередження: ваш пароль застаріє за %d дніПопередження: ваш пароль застаріє за %d днівПопередження: ваш пароль застаріє за %d днівЛаскаво просимо до вашого нового запису!Бажаєте ввести іншу роль або рівень?Вам необхідно негайно змінити пароль (поточний пароль застарів)Вам необхідно негайно змінити пароль (вимога адміністратора)У теці %s є поштові повідомлення.Надійшла пошта.У теці %s є нові поштові повідомлення.Надійшла нова пошта.У теці %s немає поштових повідомлень.У теці %s є старі поштові повідомлення.Ви маєте стару пошту.Вам слід вибрати довший парольВи повинні зачекати, щоб змінити ваш парольВаш обліковий запис застарів, будь ласка, зверніться до вашого системного адміністраторатільки зміни в регістрімістить ім’я користувача з формимістить надто довгу монотонну послідовність символівмістить забагато послідовних однакових символівпомилкова розмова (%d) не вдалося ініціалізувати PAM помилка pam_set_item() — це паліндромчергуєтьсятакий самий, як і старийзанадто подібний до старогозанадто простийрівень:користувач:вхід: помилка розгалуження: %mпомилка під час спроби отримання області у пам’ятінедостатнє використання класів символівроль:Linux-PAM-1.1.8/po/hu.po0000644000000000000000000004366712216527617011545 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Kalman Kemenczy , 2006-2007 # Keresztes Ákos , 2006 # Papp Zsolt , 2006 # Zoltan Hoppár , 2012-2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-01-08 15:13+0000\n" "Last-Translator: Zoltan Hoppár \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Fogy az idő...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Sajnos lejárt az idő!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "hibás beszélgetés (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Jelszó: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Új %s%sjelszó: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Ismét az új %s%sjelszó: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Sajnálom, de a jelszavak nem egyeznek." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Ismét %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Jelszó változtatás elvetve." #: libpam/pam_item.c:311 msgid "login:" msgstr "belépő:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Sikerült" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritikus hiba - azonnali leállás" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "A modul betöltése sikertelen" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "A szimbólum nem található" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Hiba a szervizmodulban" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Rendszerhiba" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Memóriapuffer-hiba" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Engedély megtagadva" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Hitelesítési hiba" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Elégtelen azonosító adat a hitelesítési adatok eléréséhez" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "A hitelesítési szolgáltatás nem tudja lekérni a hitelesítési adatokat" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Az alsóbb szintű hitelesítési modul nem ismeri a felhasználót" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" "Elérte a szolgáltatás által engedélyezett újrapróbálkozások maximális számát" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "A hitelesítési token már nem érvényes; újra van szükség" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Felhasználói azonosító lejárt" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Nem készíthető/törölhető bejegyzés az adott munkamenethez" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "A hitelesítő szolgáltatás nem tudja lekérni a felhasználó hitelesítő adatait" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "A felhasználó hitelesítő adatai lejártak" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Hiba a felhasználó hitelesítő adatainak beállítása közben" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Nem található modulspecifikus adat" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Rossz elem lett átadva a pam_*_item() számára" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Kommunikációs hiba" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Hitelesítő tokenkezelés hiba" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "A hitelesítő adatok nem állíthatók helyre" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Hitelesítő token zár foglalt" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Hitelesítő token lejárat kikapcsolva" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "A jelszószolgáltatás előzetes ellenőrzésén megbukott" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "A PAM elosztónak a visszatérési értéket figyelmen kívül kell hagynia" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "A modul ismeretlen" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "A hitelesítő token lejárt" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "A kommunikáció egy eseményre várakozik" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Az alkalmazásnak újra meg kell hívnia a libpam modult" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Ismeretlen PAM hiba" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "ugyanaz, mint a régi" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "memória allokációs hiba" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "palindrom" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "csak a kis/nagybetűkben változott" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "túl hasonló a régihez" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "túl egyszerű" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "forgatva" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "elégtelen betűcsoport" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "túl sok egymást követő betű egyezik meg" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "túl hosszú monoton karaktersorozatot tartalmaz" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "valahogy tartalmazza a felhasználó nevét" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Nincs jelszó megadva" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Változatlan jelszó" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ROSSZ JELSZÓ: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s hiba: kilépő kód %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s hiba: %d%s jelzés érzékelve" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s hiba: 0x%x ismeretlen állapot" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "%Y. %b %e, %a %H:%M:%S %Z " #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " innen: %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr ", %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Utolsó belépés:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Üdvözöljük az új felhasználói azonosítójával!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Utolsó sikertelen belépés:%s %s %s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "%d sikertelen belépés kísérlet volt az utolsó sikeres belépés óta." msgstr[1] "%d sikertelen belépés kísérlet volt az utolsó sikeres belépés óta." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "%d sikertelen belépés kísérlet volt az utolsó sikeres belépés óta." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Túl sok bejelentkezés \"%s\" részéről." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Nincs levél." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Új levele érkezett." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Régebbi levelei vannak." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Önnek levele van." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "%s mappában nincs levél." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "%s mappában új levél van." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "%s mappában régi levél van." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "%s mappában levelek vannak." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "\"%s\" mappa létrehozása." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "„%s” mappa nem hozható létre és állítható be." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "A jelszót már használta. Válasszon másikat." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "A jelszót már használta. Válasszon másikat." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Alapértelemezett %s biztonsági környezet\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Kíván más szerepet vagy szintet megadni?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "szerep:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Nincs alapértelmezett típus %s szerephez\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "szint:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Nem érvényes biztonsági környezet" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Nincs meg %s érvényes környezete" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "%s biztonsági környezet hozzárendelve" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "%s kulcskészítő környezet hozzárendelve" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM inicializálása sikertelen\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() meghiúsult\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "bejelentkezés: elágazás hiba: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s STRESS jelszavának megváltoztatása." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Új STRESS jelszó: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Ismét az új STRESS jelszó: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Az ellenőrző elgépelve; a jelszó nem került módosításra" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Felhasználói azonosító átmenetileg zárolt (még %ld másodpercig)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Felhasználói azonosító zárolva, többszöri, %u sikertelen belépés miatt" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Hitelesítési hiba" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Szolgáltatás hiba" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Ismeretlen felhasználó" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Ismeretlen hiba" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Rossz szám a --reset= opcióban\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: %s ismeretlen opció\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-fájlnév] [--user használó] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Nem állítható vissza minden felhasználó nem-nullára\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Belépés Hibák Utolsó hibák Innen\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-fájlnév] [--file rooted-fájlnév]\n" " [-u használó] [--user használó]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Hozzáférés megadva (utolsó hozzáférés %ld másodperce volt)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "A felhasználói azonosító érvényessége lejárt; kérem keresse meg a " "rendszergazdát" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" "Azonnal meg kell változtatnia a jelszavát (rendszergazda által erőltetve)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Azonnal meg kell változtatnia a jelszavát (a jelszó elévült)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Figyelmeztetés: a jelszava %d nap múlva lejár" msgstr[1] "Figyelmeztetés: a jelszava %d nap múlva lejár" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Figyelmeztetés: a jelszava %d nap múlva lejár" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS jelszót nem sikerült módosítani." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Válasszon hosszabb jelszót" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s jelszavának megváltoztatása." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "A (jelenlegi) UNIX jelszó: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Tovább kell várnia míg megváltoztathatja a jelszavát" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Adja meg az új UNIX jelszót: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Írja be újra a UNIX jelszót: " Linux-PAM-1.1.8/po/et.po0000644000000000000000000003426412216527617011532 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # , 2012. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-12-02 11:25+0000\n" "Last-Translator: mihkel \n" "Language-Team: Estonian (http://www.transifex.com/projects/p/fedora/language/" "et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Aeg hakkab otsa saama...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Kahjuks on su aeg otsas!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "vigane vestlus (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Parool:" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Uus %s%sparool:" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Kinnita uus %s%sparool:" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Kahjuks paroolid ei klapi." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Paroolivahetus katkestatud." #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Edukas" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Mooduli laadimine nurjus" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Sümbolit ei leitud" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Süsteemi viga" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Juurepääs keelatud" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Autentimine nurjus" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Kasutajakonto on aegunud" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Tundmatu moodul" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Tundmatu PAM-i viga" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "on sama kui vana" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "on palindroom" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "on liiga sarnane vanale" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "on liiga lihtne" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "on roteeruv" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Sul ei ole posti kaustas %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Sul on uus post kaustas %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Sul on vanu poste kaustas %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Sul on poste kaustas %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "loon kataloogi '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Parooli on juba kasutatud. Vali uus parool." #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "Parooli on juba kasutatud. Vali uus parool." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "roll:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "tase:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Autentimise viga" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Teenuse viga" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Tundmatu kasutaja" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Tundmatu viga" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Su konto on aegunud; palun kontakteeru oma süsteemiadministraatoriga." #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Hoiatus: su parool aegub %d päeva pärast" msgstr[1] "Hoiatus: su parool aegub %d päeva pärast" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Hoiatus: su parool aegub %d päeva pärast" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Sa pead valima pikema parooli" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(praegune) UNIX-i parool." #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Sisesta uus UNIX-i parool:" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Kinnita uus UNIX-i parool:" Linux-PAM-1.1.8/po/fi.gmo0000644000000000000000000002716512216527620011660 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %.+Z%y08 Y'2J?dDD0._s(8>=( f > % ' !('!4P!+!$!!"! "&%"L"l"""1""2 #,<#=i#&#-##9$U$h${$$"$ $*$%$%#B%f%)%% %%%"%%&#?&#c& &&&&&+&'W'(16(Ah(((((&)D-)2r)e)2 *'>*)f*6*<*+$+7+W+#p+&+++5+O&,v,2,4,2,)-G-"g- ---%----0.?.R.n.,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-03-25 17:42+0000 Last-Translator: Juhani Numminen Language-Team: Finnish (http://www.transifex.com/projects/p/fedora/language/fi/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fi Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y koneelta %.*s päätteellä %.*s%s epäonnistui: otettiin kiinni signaali %d%s%s epäonnistui: loppukoodi %d%s epäonnistui: tuntematon tila 0x%x%s: Väärä numero annettu valinnalle --reset= %s: Ei voida palauttaa kaikkia käyttäjiä ei-nolliksi %s: Tunnistamaton valinta %s %s: [--file juurrutettu-tiedostonimi] [--user käyttäjätunnus] [--reset[=n]] [--quiet] %s: [-f juurrutettu-tiedostonimi] [--file juurrutettu-tiedostonimi] [-u käyttäjätunnus] [--user käyttäjätunnus] [-r] [--reset[=n]] [--quiet] (nykyinen) UNIX salasana: ...Aikasi on loppunut! ...Aika on loppumassa... Pääsy sallittu (edellinen kirjautuminen %ld sekuntia sitten).Käyttäjätunnus on lukittu %u epäonnistuneen kirjautumisen vuoksiKäyttäjätunnus on lukittu tilapäisesti (%ld sekuntia jäljellä)Sovelluksen tarvitsee kutsua uudelleen libpam:iaTunnistautumisvirheTunnistautumisvirheTunnistautumistietoja ei voida palauttaaTunnistautumispalvelu ei pääse tunnistautumistietoihinTunnistautumispalvelu ei pääse käyttäjän valtuustietoihinTunnistautumislipukkeen vanhentuminen otettu pois käytöstäTunnistautumislipuke vanhentunutTunnistautumislipuke ei ole enää kelvollinen, tarvitaan uusiTunnistautumislipukkeen lukko varattuTunnistautumislipukkeen käsittelyvirheHUONO SALASANA: %sVäärä tieto välitettiin pam_*_item()Valitun istunnon merkintää ei voida tehdä/poistaaVaihdetaan käyttäjän %s STRESS-salasana.Vaihdetaan käyttäjän %s salasana.KeskusteluvirheKeskustelussa odotetaan tapahtumaaLuodaan hakemisto ”%s”.Kriittinen virhe - välitön keskeytysOletustietoturvaympäristö %s Anna uusi STRESS-salasana: Anna uusi UNIX-salasana: Virhe palvelumoduulissaSalasanapalvelun alustava tarkistus ei onnistunutModuulin lataus epäonnistuiKäyttäjän valtuustiedon antaminen ei onnistunutKaikki palvelun uudelleenyritykset käytettyRiittämätön valtuustieto tunnistautumistietojen saamiseksiAvaimenluontiympäristö %s asetettiinViimeinen epäonnistunut kirjautuminen:%s%s%sViimeinen kirjautuminen:%s%s%sTunnus Epäonnistuneita Viimeisin Koneelta MuistipuskurivirheTuntematon moduuliNIS-salasanaa ei voitu vaihtaa.Uusi %s%ssalasana: Roolilla %s ei ole oletustyyppiä Ei postia.Moduuli riippuvaista tietoa ei ole läsnäEt antanut salasanaaEi kelvollinen tietoturvaympäristöSalasanan vaihtaminen keskeytettiinSalasana on jo käytetty.Salasana on jo käytetty. Valitse toinen.Salasanaa ei vaihdettuSalasana: Ei käyttöoikeuttaKirjoita uudelleen %sAnna uudelleen uusi %s%ssalasana: Anna uusi STRESS-salasana uudelleen: Anna uusi UNIX-salasana uudelleen: Tietoturvaympäristö %s asetettiinPalveluvirheSalasanat eivät täsmää.OnnistuiSymbolia ei löydettyJärjestelmävirhePAM-välittäjän tulisi hylätä paluuarvoEdellisen onnistuneen kirjautumisen jälkeen kirjautuminen on epäonnistunut %d kerran.Edellisen onnistuneen kirjautumisen jälkeen kirjautuminen on epäonnistunut %d kertaa.Edellisen onnistuneen kirjautumisen jälkeen kirjautuminen on epäonnistunut %d kertaa.Liian monta kirjautumista '%s'.Hakemistoa ”%s” ei voida luoda eikä alustaa.Kelvollisen ympäristön hakeminen käyttäjälle %s epäonnistuiTuntematon PAM-virheTuntematon virheTuntematon käyttäjäKäyttäjätili on vanhentunutKäyttäjän valtuustiedot vanhentunutKäyttäjä tuntematon taustajärjestelmän tunnistautumismoduulilleSalasanat eivät ole samat; salasanaa ei vaihdettuVaroitus: salasana vanhentuu %d päivän kuluttua.Varoitus: salasana vanhentuu %d päivän kuluttua.Varoitus: salasana vanhentuu %d päivän kuluttua.Tervetuloa uudella käyttäjätilillä!Haluatko syöttää eri roolin tai tason?Salasanasi täytyy vaihtaa heti (salasana vanhentunut)Salasanasi täytyy vaihtaa heti (pääkäyttäjän vaatimus)Sinulla on postia kansiossa %s.Sinulle on postia.Sinulla on postia kansiossa %s.Sinulle on uutta postia.Sinulla ei ole postia kansiossa %s.Sinulla on vanhaa postia kansiossa %s.Sinulla on vanha posti.Salasanan tulee olla pidempiSinun täytyy odottaa kauemmin vaihtaaksesi salasananKäyttäjätilisi on vanhentunut; ota yhteyttä järjestelmän ylläpitäjäänvain kirjainkoko muutossisältää käyttäjätunnuksen jossakin muodossasisältää liian pitkän yksitoikkoisen merkkijononsisältää liian monta samaa merkkiä peräkkäinvirheellinen keskustelu (%d) PAM:in valmistelu epäonnistui pam_set_item() kutsu epäonnistui on palindromion kierrätettyon sama kuin vanhaon liian samankaltainen vanhan kanssaon liian yksinkertainentaso:kirjautuminen:sisäänkirjautuminen: virhe haarautumisessa: %mmuistinvarausvirheliian vähän merkkiluokkiarooli:Linux-PAM-1.1.8/po/ru.po0000644000000000000000000005335612216527620011545 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Aleksandr Brezhnev , 2012 # Andrew Martynov , 2008 # Yulia , 2007,2009 # Yulia , 2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-04-09 01:12+0000\n" "Last-Translator: Yulia \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Время истекает...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Извините, ваше время истекло!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "ошибочный диалог (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Пароль: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Новый пароль %s%s: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Повторите ввод нового пароля %s%s: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Извините, но пароли не совпадают." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Повторите ввод %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Изменение пароля отменено." #: libpam/pam_item.c:311 msgid "login:" msgstr "учетная запись:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Успех" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Критическая ошибка -- незамедлительное прерывание операции" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Не удалось загрузить модуль" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Символ не найден" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Ошибка в модуле службы" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Системная ошибка" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Ошибка буфера памяти" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Доступ запрещен" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Сбой при проверке подлинности" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Недостаточно учетных данных для доступа к данным проверки подлинности" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" "Службе проверки подлинности не удается загрузить сведения аутентификации" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Пользователь не известен базовому модулю проверки подлинности" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Использовано максимальное число попыток, заданное для службы" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Маркер проверки подлинности больше недействителен; требуется новый" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Срок действия учетной записи пользователя истек" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Не удалось создать/удалить запись для указанного сеанса" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" "Службе проверки подлинности не удается загрузить учетные данные пользователя" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Срок действия учетных данных пользователя истек" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Сбой при настройке учетных данных пользователя" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Отсутствуют данные, специфичные для модуля" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "В pam_*_item() передан неверный элемент" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Ошибка диалога" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Ошибка при операциях с маркером проверки подлинности" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Не удается восстановить сведения аутентификации" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Блокировка маркера проверки подлинности занята" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Ограничение срока действия маркера проверки подлинности отключено" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Службе паролей не удалось выполнить предварительную проверку" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Возвращенное значение не должно учитываться при передаче в PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Неизвестный модуль" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Срок действия маркера проверки подлинности истек" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Процесс диалога ожидает событие" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Приложение должно повторно вызвать libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Неизвестная ошибка PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "совпадает со старым" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "ошибка выделения памяти" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "является палиндромом" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "изменения только в регистре" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "слишком похож на старый" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "слишком простой" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "является результатом чередования" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "слишком мало символов различных типов" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "содержит слишком длинную последовательность одинаковых символов" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "содержит слишком много повторяющихся символов" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "содержит имя пользователя" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Пароль не указан" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Пароль не изменен" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "НЕУДАЧНЫЙ ПАРОЛЬ: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "Сбой %s. Код выхода: %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "Сбой %s. Получен сигнал %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "Сбой %s. Неизвестный статус 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "%a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "с %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "на %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Последний вход в систему:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Добро пожаловать в новую учетную запись!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Последняя неудачная попытка входа в систему:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "Со времени последнего входа была %d неудачная попытка." msgstr[1] "Число неудачных попыток со времени последнего входа: %d." msgstr[2] "Число неудачных попыток со времени последнего входа: %d." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "Число неудачных попыток со времени последнего входа: %d." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Слишком много регистраций в системе для «%s»." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Почты нет." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Есть новая почта." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Есть старая почта." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Есть почта." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Нет почты в папке %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Есть новая почта в папке %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Есть старая почта в папке %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Есть почта в папке %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Создание каталога %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Не удалось создать и инициализировать каталог %s." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Этот пароль уже был использован. Выберите другой." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Этот пароль уже использовался." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Контекст безопасности по умолчанию %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Хотите ввести другую роль или уровень?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "роль:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Для роли %s нет типа по умолчанию\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "уровень:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Неверный контекст безопасности" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Не удалось получить корректный контекст для %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Контекст безопасности %s назначен" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Контекст %s, используемый при создании ключей, назначен" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "не удалось инициировать PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "не удалось выполнить pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "регистрация: сбой при создании нового процесса: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Смена пароля STRESS для %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Введите новый пароль STRESS: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Повторите ввод нового пароля STRESS: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Подтверждение введено неправильно; пароль не изменен" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Учетная запись временно заблокирована (осталось %ld сек.)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" "Учетная запись заблокирована как следствие неудачных попыток входа (всего -- " "%u)." #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Ошибка при проверке подлинности" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Ошибка службы" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Неизвестный пользователь" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Неизвестная ошибка" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: указано неверное число для --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: неопознанный параметр %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file имя_корневого_файла] [--user имя_пользователя] [--reset[=n]] [--" "quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: не удается выполнить сброс всех пользователей в ненулевое значение\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Учетная запись Сбой Последний сбой С\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f имя_корневого_файла] [--file имя_корневого_файла]\n" " [-u имя_пользователя] [--user имя_пользователя]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Доступ предоставлен (последнее обращение было %ld сек. назад)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "Срок действия учетной записи истек; обратитесь к системному администратору" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" "Вам необходимо немедленно сменить пароль (в принудительном режиме root)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Вам необходимо немедленно сменить пароль (пароль устарел)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Предупреждение: срок действия пароля истекает через %d день" msgstr[1] "Предупреждение: срок действия пароля истекает через %d дня" msgstr[2] "Предупреждение: срок действия пароля истекает через %d дней" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Предупреждение: срок действия пароля истекает через %d дн(я)(ей)" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Пароль NIS изменить нельзя." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Выберите пароль большей длины" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Смена пароля для %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(текущий) пароль UNIX: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "До смены пароля должно пройти больше времени" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Введите новый пароль UNIX: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Повторите ввод нового пароля UNIX: " Linux-PAM-1.1.8/po/pl.po0000644000000000000000000004404512216527620011525 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Piotr Drąg , 2008,2012 # Stanisław Małolepszy , 2006 # Wojciech Kapusta , 2006 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-12-12 19:19+0000\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...czas mija...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...czas minął.\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "błędna rozmowa (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Hasło: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nowe hasło %s%s: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Proszę ponownie podać nowe hasło %s%s: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Podane hasła się nie zgadzają." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Proszę ponownie podać %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Przerwano zmianę hasła." #: libpam/pam_item.c:311 msgid "login:" msgstr "login:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Powodzenie" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Błąd krytyczny - natychmiastowe przerwanie" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Wczytanie modułu się nie powiodło" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Nie odnaleziono symbolu" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Błąd w module usługi" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Błąd systemu" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Błąd buforowania pamięci" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Brak dostępu" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Uwierzytelnienie się nie powiodło" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" "Niewystarczające uwierzytelnienie do dostępu do danych uwierzytelniających" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Usługa uwierzytelniania nie może uzyskać informacji o uwierzytelnianiu" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Użytkownik nieznany w module uwierzytelniania niższego poziomu" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Wykorzystano maksymalną liczbę prób dla usługi" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Token uwierzytelniania nie jest już prawidłowy; wymagany jest nowy" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Konto użytkownika wygasło" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Nie można utworzyć/usunąć wpisu dla podanej sesji" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Usługa uwierzytelniania nie może uzyskać uwierzytelnienia użytkownika" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Uwierzytelnienie użytkownika wygasło" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Ustawienie uwierzytelniania użytkownika nie powiodło się" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Brak danych specyficznych dla modułu" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Błędny element przekazany do pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Błąd rozmowy" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Błąd podczas modyfikowania tokenu uwierzytelniania" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Nie można odzyskać informacji uwierzytelniających" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Blokada tokenu uwierzytelniania jest zajęta" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Wygasanie tokenu uwierzytelniania jest wyłączone" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Wstępne sprawdzenie hasła przez usługę się nie powiodło" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Zwrócona wartość powinna zostać zignorowana przez PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Moduł jest nieznany" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Token uwierzytelniania wygasł" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Rozmowa oczekuje na zdarzenie" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Aplikacja musi jeszcze raz wywołać libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Nieznany błąd PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "jest identyczne ze starym" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "błąd przydziału pamięci" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "jest palindromem" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "ma zmienioną tylko wielkość znaków" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "jest za bardzo podobne do poprzedniego" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "jest za proste" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "jest obrócone" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "za mało klas znaków" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "zawiera za dużo takich samych znaków po sobie" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "zawiera za dużo takich samych znaków po sobie" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "zawiera nazwę użytkownika w pewnej formie" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Nie podano hasła" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Hasło nie zostało zmienione" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "BŁĘDNE HASŁO: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s nie powiodło się: kod wyjścia %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s nie powiodło się: otrzymano sygnał %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s nie powiodło się: nieznany stan 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " z %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " na %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Ostatnie logowanie:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Witaj na swoim nowym koncie!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Ostatnie nieudane logowanie:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Nastąpiła %d nieudana próba zalogowania od ostatniego udanego logowania." msgstr[1] "" "Nastąpiły %d nieudane próby zalogowania od ostatniego udanego logowania." msgstr[2] "" "Nastąpiło %d nieudanych prób zalogowania od ostatniego udanego logowania." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Nastąpiło %d nieudanych prób zalogowania od ostatniego udanego logowania." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Za dużo prób zalogowania na \"%s\"." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Brak wiadomości." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Odebrano nowe wiadomości." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Skrzynka zawiera stare wiadomości." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Odebrano wiadomości." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Brak wiadomości w folderze %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Nowe wiadomości w folderze %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Stare wiadomości w folderze %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Wiadomości w folderze %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Tworzenie katalogu \"%s\"." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Nie można utworzyć i zainicjować katalogu \"%s\"." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Hasło było już używane. Proszę wybrać inne." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Hasło było już używane." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Domyślny kontekst bezpieczeństwa %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Wprowadzić inną rolę lub poziom?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rola:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Brak domyślnego typu dla roli %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "poziom:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Nieprawidłowy kontekst bezpieczeństwa" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Nie można uzyskać prawidłowego kontekstu dla %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Kontekst bezpieczeństwa %s został przypisany" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Kontekst tworzenia klucza %s został przypisany" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "zainicjowanie PAM się nie powiodło\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() się nie powiodło\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: rozdzielenie się nie powiodło: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Zmienianie hasła STRESS dla %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Proszę podać nowe hasło STRESS: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Proszę ponownie podać hasło STRESS: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Sprawdzenie się nie powiodło; hasło nie zostało zmienione" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Konto zostało tymczasowo zablokowane (pozostało %ld sekund)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Konto zostało zablokowane z powodu %u nieudanych logowań" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Błąd uwierzytelniania" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Błąd usługi" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Nieznany użytkownik" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Nieznany błąd" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: podano błędny numer dla --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: nierozpoznana opcja %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file nazwa-pliku-root] [--user nazwa-użytkownika] [--reset[=n]] [--" "quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: nie można przywrócić wszystkich użytkowników\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Niepowodzenia Ostatnie niepowodzenie Z\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f nazwa-pliku-root] [--file nazwa-pliku-root]\n" " [-u nazwa-użytkownika] [--user nazwa-użytkownika]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Nadano dostęp (ostatni dostęp %ld sekund temu)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Konto wygasło; proszę skontaktować się z administratorem systemu" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Wymagana jest natychmiastowa zmiana hasła (wymuszone przez roota)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Wymagana jest natychmiastowa zmiana hasła (hasło wygasło)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Ostrzeżenie: hasło wygaśnie za %d dzień" msgstr[1] "Ostrzeżenie: hasło wygaśnie za %d dni" msgstr[2] "Ostrzeżenie: hasło wygaśnie za %d dni" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Ostrzeżenie: hasło wygaśnie za %d dni" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Nie można zmienić hasła NIS." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Należy wybrać dłuższe hasło" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Zmienianie hasła dla %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(obecne) hasło UNIX:" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Należy poczekać dłużej, aby zmienić hasło" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Proszę podać nowe hasło UNIX: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Proszę ponownie podać hasło UNIX: " Linux-PAM-1.1.8/po/nb.po0000644000000000000000000004233112216527620011505 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Kjartan Maraas , 2008,2012-2013 # Olav Pettershagen , 2005-2006 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-01-08 13:18+0000\n" "Last-Translator: Kjartan Maraas \n" "Language-Team: Norwegian Bokmål \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Tiden er i ferd med utløpe..\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Beklager, tiden er utløpt!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "mislykket dialog (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Passord: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nytt %s%spassord: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Bekreft nytt %s%s-passord: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Beklager, ikke samsvar mellom passord." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Skriv %s på nytt" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Bytte av passord avbrutt." #: libpam/pam_item.c:311 msgid "login:" msgstr "logg inn:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Utført" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritisk feil - avbryter straks" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Klarte ikke å laste modul" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbol ikke funnet" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Feil i tjenestemodul" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Systemfeil" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Minnebufferfeil" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Tillatelse avvist" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Autentiseringsfeil" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Utilstrekkelige rettigheter for tilgang til autentiseringsinformasjon" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Autentiseringstjenesten kan ikke hente autentiseringsinformasjon" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Bruker ukjent for autentiseringsmodul" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Maksimalt antall forsøk er overskredet for tjenesten" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Autentiseringsjide ikke lenger gyldig; ny kode kreves" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Brukerkonto er utløpt" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Kan ikke opprette/fjerne en oppføring for den valgte økten" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Autentiseringstjenesten kan ikke hente brukerrettigheter" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Brukerrettigheter utløpt" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Feil under definisjon av brukerrettigheter" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Nei modulspesifikk informasjon finnes" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Ugyldig oppføring angitt for pam_*_item()" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Dialogfeil" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Manipulasjonsfeil for autentiseringskode" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Autentiseringsinformasjon kan ikke gjenopprettes" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Låsing av autentiseringskode opptatt" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Tidsbegrensning av autentiseringskode deaktivert" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Passordtjenestens innledende kontroll mislyktes" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Resultatverdien bør ignoreres av PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Modulen er ukjent" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Autentiseringskode utløpt" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Dialogen venter på hendelse" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Programmet må spørre libpam på nytt" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Ukjent PAM-feil" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "er det samme som det gamle" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "feil med minneallokering" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "er et palindrom" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "kun endring av små/store bokstaver" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "er for likt det gamle" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "er for enkelt" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "er rotert" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "ikke nok tegnklasser" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "inneholder for mange like tegn etter hverandre" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "inneholder for lang monoton tegnsekvens" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "inneholder brukernavnet i en eller annen form" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Passord ikke angitt" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Passord uendret" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "SVAKT PASSORD: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s feilet: sluttkode %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s feilet: fikk signal %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s feilet: ukjent status 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " fra %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " på %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Siste innlogging:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Velkommen til din nye konto!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Siste feilede innlogging:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Det har vært %d feilet innloggingsforsøk siden forrige innlogging uten feil." msgstr[1] "" "Det har vært %d feilede innloggingsforsøk siden siste innlogging uten feil." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Det har vært %d feilede innloggingsforsøk siden siste innlogging uten feil." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "For mange innlogginger for '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Ingen e-post." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Du har fått ny e-post." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Du har ulest e-post." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Du har fått e-post." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Du har ingen e-post i mappen %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Du har ny e-post i mappen %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Du har ulest e-post i mappen %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Du har e-post i mappen %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Oppretter katalog «%s»." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Kan ikke lage og initiere katalog «%s»." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Passordet er allerede benyttet. Velg et annet." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "Passordet har allerede vært brukt." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Forvalgt sikkerhetskontekst %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Vil du angi en annen rolle eller nivå?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rolle:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Ingen forvalgt type for rolle %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "nivå:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Ikke en gyldig sikkerhetskontekst" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Kan ikke finne gyldig kontekst for %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Sikkerhetskontekst %s tilordnet" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Kontekst %s for oppretting av nøkkel tilordnet" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "kunne ikke initialisere PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "kunne ikke pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: feil under forgrening: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Endrer STRESS-passord for %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Angi nytt STRESS-passord: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Bekreft nytt STRESS-passord: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Bekreftelse feil skrevet; passord uendret" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Konto midlertidig låst (%ld sekunder igjen)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Konto låst på grunn av %u feilede innlogginger" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Autentiseringsfeil" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Tjenestefeil" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Ukjent bruker" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Ukjent feil" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Ugyldig tall angitt for --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Ukjent valg %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filnavn] [--user brukernavn] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Kan ikke tilbakestille alle brukere til non-zero\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Brukernavn Feil Siste feil Fra\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filnavn] [--file rooted-filnavn]\n" "[-u brukernavn] [--user brukernavn]\n" "[-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Tilgang gitt (siste tilgang var for %ld sekunder siden)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "Din konto er utløpt; kontakt systemadministratoren" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Du må straks endre passordet ditt (ordre fra rot)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Du må straks endre passordet ditt (passord for gammelt)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Advarsel: passordet ditt vil utløpe om %d dag" msgstr[1] "Advarsel: passordet ditt vil utløpe om %d dager" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Advarsel: passordet ditt vil utløpe om %d dager" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS-passord kunne ikke endres." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Du må velge et lengre passord" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Endrer passord for %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(gjeldende) UNIX-passord: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Du må vente lenger før du kan endre passordet" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Angi nytt UNIX-passord: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Bekreft nytt UNIX-passord: " Linux-PAM-1.1.8/po/nb.gmo0000644000000000000000000002600412216527620011650 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %  4%R5xHu !80,H&u0@840m5%( > *P <{    !/!N!n!!!/!!*"5-"Ec"/"""0#B#R#d##!# #%##!$"$#<$.`$$ $$$$$%#% C%&P%w%% %%%%M`& &)&%&' /' ;'I'`'%z')'_'0*([('x(8(2( )')<)Z) r) )))/)3*#L*-p*'*.** +)+D+ T+^+y+ ++ + ++++,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-01-08 13:18+0000 Last-Translator: Kjartan Maraas Language-Team: Norwegian Bokmål MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nb Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y fra %.*s på %.*s%s feilet: fikk signal %d%s%s feilet: sluttkode %d%s feilet: ukjent status 0x%x%s: Ugyldig tall angitt for --reset= %s: Kan ikke tilbakestille alle brukere til non-zero %s: Ukjent valg %s %s: [--file rooted-filnavn] [--user brukernavn] [--reset[=n]] [--quiet] %s: [--file rooted-filnavn] [--file rooted-filnavn] [-u brukernavn] [--user brukernavn] [-r] [--reset[=n]] [--quiet] (gjeldende) UNIX-passord: ...Beklager, tiden er utløpt! ...Tiden er i ferd med utløpe.. Tilgang gitt (siste tilgang var for %ld sekunder siden).Konto låst på grunn av %u feilede innloggingerKonto midlertidig låst (%ld sekunder igjen)Programmet må spørre libpam på nyttAutentiseringsfeilAutentiseringsfeilAutentiseringsinformasjon kan ikke gjenopprettesAutentiseringstjenesten kan ikke hente autentiseringsinformasjonAutentiseringstjenesten kan ikke hente brukerrettigheterTidsbegrensning av autentiseringskode deaktivertAutentiseringskode utløptAutentiseringsjide ikke lenger gyldig; ny kode krevesLåsing av autentiseringskode opptattManipulasjonsfeil for autentiseringskodeSVAKT PASSORD: %sUgyldig oppføring angitt for pam_*_item()Kan ikke opprette/fjerne en oppføring for den valgte øktenEndrer STRESS-passord for %s.Endrer passord for %s.DialogfeilDialogen venter på hendelseOppretter katalog «%s».Kritisk feil - avbryter straksForvalgt sikkerhetskontekst %s Angi nytt STRESS-passord: Angi nytt UNIX-passord: Feil i tjenestemodulPassordtjenestens innledende kontroll mislyktesKlarte ikke å laste modulFeil under definisjon av brukerrettigheterMaksimalt antall forsøk er overskredet for tjenestenUtilstrekkelige rettigheter for tilgang til autentiseringsinformasjonKontekst %s for oppretting av nøkkel tilordnetSiste feilede innlogging:%s%s%sSiste innlogging:%s%s%sBrukernavn Feil Siste feil Fra MinnebufferfeilModulen er ukjentNIS-passord kunne ikke endres.Nytt %s%spassord: Ingen forvalgt type for rolle %s Ingen e-post.Nei modulspesifikk informasjon finnesPassord ikke angittIkke en gyldig sikkerhetskontekstBytte av passord avbrutt.Passordet har allerede vært brukt.Passordet er allerede benyttet. Velg et annet.Passord uendretPassord: Tillatelse avvistSkriv %s på nyttBekreft nytt %s%s-passord: Bekreft nytt STRESS-passord: Bekreft nytt UNIX-passord: Sikkerhetskontekst %s tilordnetTjenestefeilBeklager, ikke samsvar mellom passord.UtførtSymbol ikke funnetSystemfeilResultatverdien bør ignoreres av PAMDet har vært %d feilet innloggingsforsøk siden forrige innlogging uten feil.Det har vært %d feilede innloggingsforsøk siden siste innlogging uten feil.Det har vært %d feilede innloggingsforsøk siden siste innlogging uten feil.For mange innlogginger for '%s'.Kan ikke lage og initiere katalog «%s».Kan ikke finne gyldig kontekst for %sUkjent PAM-feilUkjent feilUkjent brukerBrukerkonto er utløptBrukerrettigheter utløptBruker ukjent for autentiseringsmodulBekreftelse feil skrevet; passord uendretAdvarsel: passordet ditt vil utløpe om %d dagAdvarsel: passordet ditt vil utløpe om %d dagerAdvarsel: passordet ditt vil utløpe om %d dagerVelkommen til din nye konto!Vil du angi en annen rolle eller nivå?Du må straks endre passordet ditt (passord for gammelt)Du må straks endre passordet ditt (ordre fra rot)Du har e-post i mappen %s.Du har fått e-post.Du har ny e-post i mappen %s.Du har fått ny e-post.Du har ingen e-post i mappen %s.Du har ulest e-post i mappen %s.Du har ulest e-post.Du må velge et lengre passordDu må vente lenger før du kan endre passordetDin konto er utløpt; kontakt systemadministratorenkun endring av små/store bokstaverinneholder brukernavnet i en eller annen forminneholder for lang monoton tegnsekvensinneholder for mange like tegn etter hverandremislykket dialog (%d) kunne ikke initialisere PAM kunne ikke pam_set_item() er et palindromer roterter det samme som det gamleer for likt det gamleer for enkeltnivå:logg inn:login: feil under forgrening: %mfeil med minneallokeringikke nok tegnklasserrolle:Linux-PAM-1.1.8/po/ur.gmo0000644000000000000000000000073112216527620011676 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Urdu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ur Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/bn.po0000644000000000000000000006140212216527617011513 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ayesha Akhtar , 2012. # Mahay Alam Khan , 2012. # Mahay Alam Khan , 2012. # Newton Baidya , 2012. # Robin Mehdee , 2012. # Runa Bhattacharjee , 2009. # Runa Bhattacharjee , 2007, 2008. # , 2012. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2012-04-10 20:36+0000\n" "Last-Translator: Mahay Alam Khan \n" "Language-Team: Bengali \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...সময় সমাপ্তির পথে...⏎ \n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...দুঃখিত, সময় সমাপ্ত!⏎ \n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "ত্রুটিপূর্ণ তথ্যবিনিময় (%d)⏎\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "পাসওয়ার্ড: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "নতুন %s%s পাসওয়ার্ড: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "নতুন %s%s পাসওয়ার্ড পুনরায় লিখুন: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "দুঃখিত, পাসওয়ার্ড দুটি এক নয়।" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s পুনরায় লিখুন" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "পাসওয়ার্ড পরিবর্তন প্রক্রিয়া বাতিল করা হয়েছে।" #: libpam/pam_item.c:311 msgid "login:" msgstr "লগ-ইন:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "সফল" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "গুরুতর সমস্যা - এই মুহূর্তে পরিত্যাগ করা হবে" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "মডিউল লোড করতে ব্যর্থ" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "চিহ্ন পাওয়া যায়নি" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "পরিসেবা মডিউলে সমস্যা" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "সিস্টেম সংক্রান্ত সমস্যা" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "মেমরি বাফার সংক্রান্ত সমস্যা" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "অনুমতি প্রদান করা হয়নি" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "অনুমোদন ব্যর্থ" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "অনুমোদন সংক্রান্ত তথ্য প্রাপ্ত করার জন্য পর্যাপ্ত প্রমাণ উপলব্ধ নেই" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "অনুমোদন পরিসেবা দ্বারা অনুমোদন সংক্রান্ত তথ্য উদ্ধার করা সম্ভব হয়নি" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "পটভূমিতে চলমান অনুমোদন ব্যবস্থায় ব্যবহারকারী পরিচিত নন।" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "পরিসেবায় উপলব্ধ সর্বাধিক প্রচেষ্টার সুযোগ সংখ্যা সমাপ্ত" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "অনুমোদনের টোকেন বৈধ নয়; নতুন টোকেন ব্যবহার করা আবশ্যক" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "ব্যবহারকারী অ্যাকাউন্টের মেয়াদ পূর্ণ হয়েছে" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "সুনির্দিষ্ট সেশানের জন্য কোনো এন্ট্রি নির্মাণ/অপসারণ করা সম্ভব নয়" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "অনুমোদন পরিসেবা দ্বারা প্রয়োজনীয় প্রমাণ উদ্ধার করা সম্ভব হয়নি" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "ব্যবহারকারীর পরিচয়প্রমাণের তথ্যের মেয়াদ পূর্ণ হয়েছে" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "ব্যবহারকারীর পরিচয়প্রমাণের তথ্য নির্ধারণ করতে ব্যর্থ" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "মডিউল সংক্রান্ত কোনো তথ্য উপস্থিত নেই" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item()-এ সঠিক মান প্রেরিত হয়নি" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Conversation অর্থাৎ তথ্য বিনিময়কালীন সমস্যা" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "অনুমোদন টোকেন ব্যবস্থাপনা করতে সমস্যা" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "অনুমোদন সংক্রান্ত তথ্য পুনরুদ্ধার করতে ব্যর্থ" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "অনুমোদন টোকেনের লক ব্যস্ত" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "অনুমোদন টোকেনের মেয়াদ পূর্তী ব্যবস্থা নিষ্ক্রিয়" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "পাসওয়ার্ড পরিসেবা দ্বারা প্রারম্ভিক পরীক্ষা ব্যর্থ" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "উৎপন্ন মান PAM dispatch দ্বারা অগ্রাহ্য করা হবে" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "মডিউল অজানা" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "অনুমোদন টোকেনের মেয়াদ পূর্ণ হয়েছে" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Conversation অর্থাৎ তথ্য বিনিময় প্রক্রিয়া একটি ইভেন্টের অপেক্ষায় রয়েছে" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "অ্যাপ্লিকেশন দ্বারা পুনরায় libpam আরম্ভ করা আবশ্যক" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "PAM সংক্রান্ত অজানা ত্রুটি" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "পুরোনোটির অনুরূপ" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "মেমরি বরাদ্দ করতে সমস্যা" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "উভমুখী শব্দ" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "শুধুমাত্র হরফের ছাঁদ পরিবর্তন করা হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "পুরোনো পাসওয়ার্ডের সমতূল্য" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "জটিল নয়" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "ঘোরানো হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "পর্যাপ্ত অক্ষর শ্রেণী উপস্থিত নেই" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "একই অক্ষর অত্যাধিক বার ক্রমাগত ব্যবহার করা হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:664 #, fuzzy msgid "contains too long of a monotonic character sequence" msgstr "একই অক্ষর অত্যাধিক বার ক্রমাগত ব্যবহার করা হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "কোনো রূপে ব্যবহারকারী নাম অন্তর্ভুক্ত হয়েছে" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "কোনো পাসওয়ার্ড উল্লিখিত হয়নি" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "পাসওয়ার্ড পরিবর্তন করা হয়নি" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "পাসওয়ার্ড ভাল নয়: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s বিফল: প্রস্থানকালীন কোড %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s বিফল: %d%s সিগনাল প্রাপ্ত" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s বিফল: অজানা অবস্থা 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s থেকে" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s -র উপর" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "সর্বশেষ লগ-ইন:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "নতুন অ্যাকাউন্টে স্বাগতম!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "সর্বশেষ বিফল লগ-ইন:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।" msgstr[1] "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s'-র ক্ষেত্রে অত্যাধিক লগ-ইন" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "কোনো মেইল নেই।" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "নতুন মেইল প্রাপ্ত।" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "পুরোনো মেইল রয়েছে।" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "মেইল রয়েছে।" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "%s ফোল্ডারে কোনো মেইল উপস্থিত নেই।" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "%s ফোল্ডারে নতুন মেইল উপস্থিত।" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "%s ফোল্ডারে পুরোনো মেইল উপস্থিত রয়েছে।" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "%s ফোল্ডারে মেইল উপস্থিত রয়েছে।" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "'%s' ডিরেক্টরি নির্মাণ করা হচ্ছে।" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "ডিরেক্টরি '%s' নির্মাণ ও আরম্ভ করতে ব্যর্থ।" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।" #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "ডিফল্ট Security Context %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "ভিন্ন role অথবা level লিখতে ইচ্ছুক কি?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "role: " #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "role %s-র জন্য কোনো ডিফল্ট type উপস্থিত নেই\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "level: " #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "বৈধ নিরাপত্তা সংক্রান্ত context নয়" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s-র বৈধ context প্রাপ্ত করতে ব্যর্থ" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Security Context %s ধার্য করা হয়েছে" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "কি নির্মাণের Context %s ধার্য করা হয়েছে" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM আরম্ভ করতে ব্যর্থ\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() করতে ব্যর্থ\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "লগ-ইন: fork করতে ব্যর্থ: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s-র STRESS পাসওয়ার্ড পরিবর্তন করা হচ্ছে।" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "নতুন STRESS পাসওয়ার্ড লিখুন: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "নতুন STRESS পাসওয়ার্ড পুনরায় লিখুন: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "নিশ্চায়ন কাল ভুল টাইপ করা হয়েছে; পাসওয়ার্ড পরিবর্তন করা হয়নি" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "সাময়িকরূপে অ্যাকাউন্ট লক করা হয়েছে (%ld সেকেন্ড অবশিষ্ট)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u ব্যর্থ লগ-ইনের ফলে অ্যাকাউন্ট লক করা হয়েছে" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "অনুমোদন সংক্রান্ত সমস্যা" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "পরিসেবা সংক্রান্ত সমস্যা" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "অজানা ব্যবহারকারী" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "অজানা সমস্যা" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset= এর জন্য ভুল সংখ্যা উল্লিখিত\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: অজানা বিকল্প %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: সব ব্যবহারকারীর জন্য শূণ্য-ভিন্ন মান ধার্য করতে ব্যর্থ\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "লগ-ইন বিফলতা সর্বশেষ বিফলতা চিহ্নিত স্থান থেকে\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "প্রবেশাধিকার প্রদান করা হয়েছে (%ld পূর্বে সর্বশেষ লগ-ইন করা হয়েছে)।" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "আপনার অ্যাকাউন্টের মেয়াদপূর্ণ হয়েছে; অনুগ্রহ করে সিস্টেম অ্যাডমিনিস্ট্রেটরের সাথে " "যোগাযোগ করুন।" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "আপনার পাসওয়ার্ড এই মুহূর্তে পরিবর্তন করা আবশ্যক (root দ্বারা কার্যকরী)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "আপনার পাসওয়ার্ড এই মুহূর্তে পরিবর্তন করা আবশ্যক (password-র মেয়াদ পূর্ণ হয়েছে)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "সতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবে" msgstr[1] "সতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবে" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "সতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবে" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS পাসওয়ার্ড পরিবর্তন করা সম্ভব হয়নি।" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "চিহ্নিত পাসওয়ার্ডের থেকে লম্বা পাসওয়ার্ড উল্লেখ করা আবশ্যক" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s-র পাসওয়ার্ড পরিবর্তন করা হচ্ছে।" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(বর্তমান) UNIX পাসওয়ার্ড: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "কিছু কাল পরে পাসওয়ার্ড পরিবর্তন করা সম্ভব হবে" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "নতুন UNIX পাসওয়ার্ড উল্লেখ করুন: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "নতুন UNIX পাসওয়ার্ড পুনরায় লিখুন: " #~ msgid "Would you like to enter a security context? [N] " #~ msgstr "নিরাপত্তা সংক্রান্ত context উল্লেখ করতে ইচ্ছুক কি? [N] " Linux-PAM-1.1.8/po/mr.po0000644000000000000000000005663412216527620011537 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Sandeep Shedmake , 2008-2009 # Sandeep Shedmake , 2008-2009, 2013 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-05-03 07:46+0000\n" "Last-Translator: sandeeps \n" "Language-Team: Marathi (http://www.transifex.com/projects/p/fedora/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mr\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...वेळ फारच कमी आहे...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...माफ करा, तुमची वेळ समाप्त झाली आहे!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "सदोषीत संवाद (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "गुप्तशब्द: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "नवीन गुप्तशब्द %s%sp: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "नवीन गुप्तशब्द %s%sp पुन्हा टाइप करा: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "माफ करा, गुप्तशब्द जुळत नाही." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "%s पुन्हा प्रविष्ट करा" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "परवलीचा शब्द रद्द केले." #: libpam/pam_item.c:311 msgid "login:" msgstr "दाखलन:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "यश" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "गंभीर त्रुटी - लगेच रद्द करा" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "विभाग दाखल करण्यास अपयशी" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "बोधचिन्ह आढळले नाही" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "सेवा विभाग अंतर्गत त्रुटी आढळली" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "प्रणाली त्रुटी" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "स्मृती बफर त्रुटी" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "परवानगी नाही" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "अधिप्रमाणन अपयश" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "अधिप्रमाणन माहिती करीता प्रवेशसाठी अपुरे श्रेय" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "अधिप्रमाणन सेवा अधिप्रमाणन माहिती प्राप्त करू शकले नाही" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "अंतर्भूतीय अधिप्रमाणन विभाग करीता वापरकर्त्याची ओळख पटली नाही" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "सेवा करीताचे कमाल पुन्हप्रारंभ संख्या संपले" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "अधिप्रमाणन टोकन यापुढे वैध नाही; नवीन आवश्यक आहे" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "वापरकर्ता खाते कालबाह्य झाले" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "निर्देशीत सत्र करीता नोंदणी बनवू/काढून टाकू शकत नाही" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "अधिप्रमाणन सेवा वापरकर्ता श्रेय प्राप्त करू शकत नाही" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "वापरकर्ता श्रेय कालबाह्य झाले" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "वापरकर्ता श्रेय स्थापीत करतेवेळी अपयशी झाले" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "विभाग निर्देशीत माहिती उपलब्ध नाही" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "pam_*_item() करीता अयोग्य घटक पाठविले गेले" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "संवाद त्रुटी" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "अधिप्रमाणन टोकन सदोष त्रुटी" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "अधिप्रमाणन माहिती पुन्हा प्राप्त केली जाऊ शकत नाही" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "अधिप्रमाणन टोकन कुलूप व्यस्थ आहे" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "अधिप्रमाणन टोकन कालबाह्यता अकार्यान्वीत केले गेले" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "गुप्तशब्द सेवा करीता प्राथमिक तपास अपयशी" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "PAM ने रिटर्न मुल्य करीता दुर्लक्ष केले पाहिजे" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "विभाग अपरिचीत आहे" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "अधिप्रमाणन टोकन कालबाह्य झाले" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "संवाद घटनाच्या प्रतिक्षेत आहे" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "अनुप्रयोगास libpam ची आवश्चकता आहे" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "अपरिचीत PAM त्रुटी" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "प्रविष्ट केलेले जुण्या प्रमाणेच आहे" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "मेमरि वाटपवेळी त्रुटी" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "पॅलींड्रोम आहे" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "फक्त आकार बदलाव" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "प्रविष्ट केलेले जुण्या नुरूपच आहे" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "खूपच सोपे आहे" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "स्तर बदलविले गेले" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "अतिरिक्त अक्षर गट उपलब्ध नाही" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "पाठोपाठ खूप जास्त समान अक्षर आढळले" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "मोनोटोनिक अक्षर श्रृंखला खूपच लांब आहे" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "कुठल्यातरी स्वरूपात वापरकर्ता नाव आढळले" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "गुप्तशब्द दिलेला नाही" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "गुप्तशब्द बदलविला नाही" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "अयोग्य गुप्तशब्द: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s अपयशी: एक्जीट कोड %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s अपयशी: संकेत %d%s प्राप्त झाले" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s अपयशी: अपरिचीत स्थिती 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " %.*s पासून" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " %.*s वरील" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "शेवटचे दाखलन:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "नवीन खात्यावर स्वागत आहे!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "शेवटचे अपयशी दाखलन:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "शेवटचे यशस्वी प्रवेश पासून %d अपयशी प्रवेश प्रयत्न आढळले." msgstr[1] "शेवटचे यशस्वी प्रवेश पासून %d अपयशी प्रवेश प्रयत्न आढळले गेले." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "शेवटचे यशस्वी प्रवेश पासून %d अपयशी प्रवेश प्रयत्न आढळले." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' करीता एकापेक्षा जास्त प्रवेश." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "मेल आढळले नाही." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "नवीन मेल प्राप्त झाले." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "जुणे मेल आढळले गेले." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "मेल आढळले गेले." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "संचयीका %s अंतर्गत मेल आढळले नाही." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "संचयीका %s अंतर्गत नवीन मेल आढळले." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "संचयीका %s अंतर्गत जुणे मेल आढळले." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "संचयीका %s अंतर्गत मेल आढळले गेले." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "संचयीका '%s' बनवित आहे." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "डिरेक्ट्री '%s' बनवण्यास व प्रारंभ करण्यास अशक्य." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "ह्या गुप्तशब्दचा आधीच वापर झाला आहे. दुसरा निवडा." #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "पासवर्ड आधिपासूनच वापरले आहे." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "मुलभूत सुरक्षा संदर्भ %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "तुम्हाला अन्य भूमिका किंवा स्तर प्रविष्ट करायला आवडेल?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "भूमिका:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "भूमिका %s करीता मुलभूत प्रकार आढळले नाही\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "स्तर:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "वैध सुरक्षा संदर्भ नाही" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s करीता वैध संदर्भ प्राप्त करू शकले नाही" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "सुरक्षा संदर्भ %s लागू केले गेले" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "कि निर्माण संदर्भ %s लागू केले गेले" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM आरंभण्यात अपयशी\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() कार्यान्वीत करण्यास अपयशी\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "दाखलन: विभाजन अपयशी: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s करीता STRESS गुप्तशब्द बदलवित आहे." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "नवीन STRESS गुप्तशब्द प्रविष्ट करा: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "नवीन STRESS गुप्तशब्द पुन्हा प्रविष्ट करा: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "तपासणी पूर्ण झाली नाही; गुप्तशब्द बदलविले नाही" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "खातं तात्पूर्ते कुलूपबंद केले (%ld सेकंद शिल्लक)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u अपयशी प्रवेश मुळे खाते कुलूपबंद केले" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "अधिप्रमाणन त्रुटी" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "सेवा त्रुटी" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "अपरिचीत वापरकर्ता" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "अपरिचित चूक" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset= करीता अयोग्य संख्या पुरविली गेली\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: अपरिचीत पर्याय %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file रूटेड-फाइलनाव] [--user वापरकर्त्याचे नाव] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: सर्व वापरकर्ता विना-शून्य असे पुन्हस्थापन करू शकत नाही\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "प्रवेश अपयशी अलिकडील अपयश पासून\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "प्रवेश स्वीकारले (शेवटचा प्रवेश %ld सेकंद पूर्वी आढळला)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "तुमचे खाते बंद झाले आहे, कृपया तुमच्या संगणक व्यवस्थापकाकडे जा" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "तुमचा गुप्तशब्द तत्काळ बदलण्याची आवश्यकता आहे (रूट वापरा)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "तुमचा गुप्तशब्द तत्काळ बदलण्याची आवश्यकता आहे (गुप्तशब्द जुना आहे)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "सावधानता: तुमचे गुप्तशब्द %d दिवस अंतर्गत कालबाह्य होईल" msgstr[1] "सावधानता: तुमचे गुप्तशब्द %d दिवस अंतर्गत कालबाह्य होईल" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "सावधानता: तुमचे गुप्तशब्द %d दिवसात कालबाह्य होईल" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS गुप्तशब्द बदलविले जाऊ शकत नाही." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "तुम्ही मोठा गुप्तशब्द निवडला पाहीजे" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s करीता गुप्तशब्द बदलवित आहे." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(चालू) UNIX गुप्तशब्द: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "तुमचा गुप्तशब्द बदलण्यासाठी तुम्हाला बराच वेळ वाट पहावी लागेल" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "नवीन UNIX गुप्तशब्द प्रविष्ट करा: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "नवीन UNIX गुप्तशब्द पुन्हा टाइप करा: " Linux-PAM-1.1.8/po/Linux-PAM.pot0000644000000000000000000003222312216527617013011 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # 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: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+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" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/ast.gmo0000644000000000000000000000076412216527620012045 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Asturian (http://www.transifex.com/projects/p/fedora/language/ast/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ast Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/sq.gmo0000644000000000000000000000076212216527620011677 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Albanian (http://www.transifex.com/projects/p/fedora/language/sq/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sq Plural-Forms: nplurals=2; plural=(n != 1); Linux-PAM-1.1.8/po/bn.gmo0000644000000000000000000004322312216527620011652 00000000000000y8 9 R ] f   ! &  G uh    1/ &a + &   . :6 7q #  9 $'Ck|5  ! B [|, *4K6 15I"[~" /%U hs   +3 D2QD Q/k"  6*TZ-2%DXD -@_!,B$#6/Z  /=DKf~C\o>E8 WB*2G]u:9V7st~y D (=!}f!!"D#[#$$E$g$0`%J%%_&X&aG''ST(t(')AE)O);)*9**m+,W,7-*O-z-N.U.bu./.^/&g/e/N/PC0}01K12<32%p2R2T2R>3=3D3M4 b4/l4D4i4OK56HC7m7N7BI8"818v8X99:#;~!<E<R<9==Q>?N!?2p?X?d?2a@@y5AAkBw#CCID4hD/DD"D.EJ?EEEE7EBE[0FFO'J%[(v:+D;Xy`1\uWwxb"sG.qU EZp*F&jhA6k8 )Co?/39gH=^#,i5dt ]!RcT7r2Nle4 Lf-BP aS>m_0IMn$@KVQ Y< %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-04-10 20:36+0000 Last-Translator: Mahay Alam Khan Language-Team: Bengali MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bn Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y %.*s থেকে %.*s -র উপর%s বিফল: %d%s সিগনাল প্রাপ্ত%s বিফল: প্রস্থানকালীন কোড %d%s বিফল: অজানা অবস্থা 0x%x%s: --reset= এর জন্য ভুল সংখ্যা উল্লিখিত %s: সব ব্যবহারকারীর জন্য শূণ্য-ভিন্ন মান ধার্য করতে ব্যর্থ %s: অজানা বিকল্প %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (বর্তমান) UNIX পাসওয়ার্ড: ...দুঃখিত, সময় সমাপ্ত!⏎ ...সময় সমাপ্তির পথে...⏎ প্রবেশাধিকার প্রদান করা হয়েছে (%ld পূর্বে সর্বশেষ লগ-ইন করা হয়েছে)।%u ব্যর্থ লগ-ইনের ফলে অ্যাকাউন্ট লক করা হয়েছেসাময়িকরূপে অ্যাকাউন্ট লক করা হয়েছে (%ld সেকেন্ড অবশিষ্ট)অ্যাপ্লিকেশন দ্বারা পুনরায় libpam আরম্ভ করা আবশ্যকঅনুমোদন সংক্রান্ত সমস্যাঅনুমোদন ব্যর্থঅনুমোদন সংক্রান্ত তথ্য পুনরুদ্ধার করতে ব্যর্থঅনুমোদন পরিসেবা দ্বারা অনুমোদন সংক্রান্ত তথ্য উদ্ধার করা সম্ভব হয়নিঅনুমোদন পরিসেবা দ্বারা প্রয়োজনীয় প্রমাণ উদ্ধার করা সম্ভব হয়নিঅনুমোদন টোকেনের মেয়াদ পূর্তী ব্যবস্থা নিষ্ক্রিয়অনুমোদন টোকেনের মেয়াদ পূর্ণ হয়েছেঅনুমোদনের টোকেন বৈধ নয়; নতুন টোকেন ব্যবহার করা আবশ্যকঅনুমোদন টোকেনের লক ব্যস্তঅনুমোদন টোকেন ব্যবস্থাপনা করতে সমস্যাপাসওয়ার্ড ভাল নয়: %spam_*_item()-এ সঠিক মান প্রেরিত হয়নিসুনির্দিষ্ট সেশানের জন্য কোনো এন্ট্রি নির্মাণ/অপসারণ করা সম্ভব নয়%s-র STRESS পাসওয়ার্ড পরিবর্তন করা হচ্ছে।%s-র পাসওয়ার্ড পরিবর্তন করা হচ্ছে।Conversation অর্থাৎ তথ্য বিনিময়কালীন সমস্যাConversation অর্থাৎ তথ্য বিনিময় প্রক্রিয়া একটি ইভেন্টের অপেক্ষায় রয়েছে'%s' ডিরেক্টরি নির্মাণ করা হচ্ছে।গুরুতর সমস্যা - এই মুহূর্তে পরিত্যাগ করা হবেডিফল্ট Security Context %s নতুন STRESS পাসওয়ার্ড লিখুন: নতুন UNIX পাসওয়ার্ড উল্লেখ করুন: পরিসেবা মডিউলে সমস্যাপাসওয়ার্ড পরিসেবা দ্বারা প্রারম্ভিক পরীক্ষা ব্যর্থমডিউল লোড করতে ব্যর্থব্যবহারকারীর পরিচয়প্রমাণের তথ্য নির্ধারণ করতে ব্যর্থপরিসেবায় উপলব্ধ সর্বাধিক প্রচেষ্টার সুযোগ সংখ্যা সমাপ্তঅনুমোদন সংক্রান্ত তথ্য প্রাপ্ত করার জন্য পর্যাপ্ত প্রমাণ উপলব্ধ নেইকি নির্মাণের Context %s ধার্য করা হয়েছেসর্বশেষ বিফল লগ-ইন:%s%s%sসর্বশেষ লগ-ইন:%s%s%sলগ-ইন বিফলতা সর্বশেষ বিফলতা চিহ্নিত স্থান থেকে মেমরি বাফার সংক্রান্ত সমস্যামডিউল অজানাNIS পাসওয়ার্ড পরিবর্তন করা সম্ভব হয়নি।নতুন %s%s পাসওয়ার্ড: role %s-র জন্য কোনো ডিফল্ট type উপস্থিত নেই কোনো মেইল নেই।মডিউল সংক্রান্ত কোনো তথ্য উপস্থিত নেইকোনো পাসওয়ার্ড উল্লিখিত হয়নিবৈধ নিরাপত্তা সংক্রান্ত context নয়পাসওয়ার্ড পরিবর্তন প্রক্রিয়া বাতিল করা হয়েছে।পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।পাসওয়ার্ড পরিবর্তন করা হয়নিপাসওয়ার্ড: অনুমতি প্রদান করা হয়নি%s পুনরায় লিখুননতুন %s%s পাসওয়ার্ড পুনরায় লিখুন: নতুন STRESS পাসওয়ার্ড পুনরায় লিখুন: নতুন UNIX পাসওয়ার্ড পুনরায় লিখুন: Security Context %s ধার্য করা হয়েছেপরিসেবা সংক্রান্ত সমস্যাদুঃখিত, পাসওয়ার্ড দুটি এক নয়।সফলচিহ্ন পাওয়া যায়নিসিস্টেম সংক্রান্ত সমস্যাউৎপন্ন মান PAM dispatch দ্বারা অগ্রাহ্য করা হবেসর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।'%s'-র ক্ষেত্রে অত্যাধিক লগ-ইনডিরেক্টরি '%s' নির্মাণ ও আরম্ভ করতে ব্যর্থ।%s-র বৈধ context প্রাপ্ত করতে ব্যর্থPAM সংক্রান্ত অজানা ত্রুটিঅজানা সমস্যাঅজানা ব্যবহারকারীব্যবহারকারী অ্যাকাউন্টের মেয়াদ পূর্ণ হয়েছেব্যবহারকারীর পরিচয়প্রমাণের তথ্যের মেয়াদ পূর্ণ হয়েছেপটভূমিতে চলমান অনুমোদন ব্যবস্থায় ব্যবহারকারী পরিচিত নন।নিশ্চায়ন কাল ভুল টাইপ করা হয়েছে; পাসওয়ার্ড পরিবর্তন করা হয়নিসতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবেসতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবেসতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবেনতুন অ্যাকাউন্টে স্বাগতম!ভিন্ন role অথবা level লিখতে ইচ্ছুক কি?আপনার পাসওয়ার্ড এই মুহূর্তে পরিবর্তন করা আবশ্যক (password-র মেয়াদ পূর্ণ হয়েছে)আপনার পাসওয়ার্ড এই মুহূর্তে পরিবর্তন করা আবশ্যক (root দ্বারা কার্যকরী)%s ফোল্ডারে মেইল উপস্থিত রয়েছে।মেইল রয়েছে।%s ফোল্ডারে নতুন মেইল উপস্থিত।নতুন মেইল প্রাপ্ত।%s ফোল্ডারে কোনো মেইল উপস্থিত নেই।%s ফোল্ডারে পুরোনো মেইল উপস্থিত রয়েছে।পুরোনো মেইল রয়েছে।চিহ্নিত পাসওয়ার্ডের থেকে লম্বা পাসওয়ার্ড উল্লেখ করা আবশ্যককিছু কাল পরে পাসওয়ার্ড পরিবর্তন করা সম্ভব হবেআপনার অ্যাকাউন্টের মেয়াদপূর্ণ হয়েছে; অনুগ্রহ করে সিস্টেম অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।শুধুমাত্র হরফের ছাঁদ পরিবর্তন করা হয়েছেকোনো রূপে ব্যবহারকারী নাম অন্তর্ভুক্ত হয়েছেএকই অক্ষর অত্যাধিক বার ক্রমাগত ব্যবহার করা হয়েছেত্রুটিপূর্ণ তথ্যবিনিময় (%d)⏎ PAM আরম্ভ করতে ব্যর্থ pam_set_item() করতে ব্যর্থ উভমুখী শব্দঘোরানো হয়েছেপুরোনোটির অনুরূপপুরোনো পাসওয়ার্ডের সমতূল্যজটিল নয়level: লগ-ইন:লগ-ইন: fork করতে ব্যর্থ: %mমেমরি বরাদ্দ করতে সমস্যাপর্যাপ্ত অক্ষর শ্রেণী উপস্থিত নেইrole: Linux-PAM-1.1.8/po/en@quot.header0000644000000000000000000000226312160065211013322 00000000000000# 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. # Linux-PAM-1.1.8/po/ast.po0000644000000000000000000003224712216527617011710 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 11:56+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Asturian (http://www.transifex.com/projects/p/fedora/language/" "ast/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ast\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "" #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "" #: libpam/pam_item.c:311 msgid "login:" msgstr "" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr "" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr "" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr "" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "" #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "" #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "" Linux-PAM-1.1.8/po/pa.po0000644000000000000000000005471512216527620011517 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # asaini , 2013 # Amanpreet Singh Alam[ਆਲਮ] , 2005 # Jaswinder Singh , 2009,2012 msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2013-08-30 12:55+0000\n" "Last-Translator: asaini \n" "Language-Team: Panjabi (Punjabi) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pa\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਰਿਹਾ ਹੈ...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...ਅਫਸੋਸ, ਤੁਹਾਡਾ ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਗਿਆ ਹੈ!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "ਗਲਤ ਅਨੁਵਾਦ (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "ਪਾਸਵਰਡ: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "ਨਵਾਂ %s%sਪਾਸਵਰਡ: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "ਨਵਾਂ %s%sਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "ਮਾਫ ਕਰਨਾ ਪਾਸਵਰਡ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ।" #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "ਮੁੜ-ਲਿਖੋ %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "ਪਾਸਵਰਡ ਤਬਦੀਲੀ ਅਧੂਰੀ ਛੱਡੀ ਗਈ।" #: libpam/pam_item.c:311 msgid "login:" msgstr "ਲਾਗਇਨ:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "ਸਫ਼ਲ" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "ਨਾਜ਼ੁਕ ਗਲਤੀ - ਤਰੁੰਤ ਅਧੂਰਾ ਛੱਡਿਆ" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "ਮੈਡਿਊਲ ਲੋਡ ਕਰਨ ਵਿੱਚ ਫੇਲ" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "ਨਿਸ਼ਾਨ ਨਹੀਂ ਮਿਲਿਆ" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "ਸੇਵਾ ਮੈਡੀਊਲ ਵਿੱਚ ਗਲਤੀ" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "ਸਿਸਟਮ ਗਲਤੀ" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "ਮੈਮੋਰੀ ਬਫ਼ਰ ਗਲਤੀ" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "ਅਧਿਕਾਰ ਪਾਬੰਦੀ" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "ਪਰਮਾਣਕਿਤਾ ਫੇਲ" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਡਾਟਾ ਵਰਤਣ ਲਈ ਲੋੜੀਂਦੇ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨ" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਸਰਵਿਸ ਪ੍ਰਮਾਣਿਕਤਾ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕਦੀ" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਮੈਡਿਊਲ ਨੂੰ ਆਪਣੇ ਉਪਭੋਗੀ ਬਾਰੇ ਕੁਝ ਪਤਾ ਨਹੀਂ" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "ਸਰਵਿਸ ਨੂੰ ਵੱਧ-ਤੋਂ-ਵੱਧ ਵਰਤਣ ਦੀ ਸੀਮਾ ਪਾਰ ਹੋ ਗਈ ਹੈ" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਟੋਕਨ ਦੀ ਮਿਆਦ ਪੁੱਗ ਚੁੱਕੀ ਹੈ, ਨਵੇਂ ਦੀ ਲੋੜ ਹੈ" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "ਉਪਭੋਗੀ ਖਾਤੇ ਦੀ ਮਿਆਦ ਪੁੱਗ ਚੁੱਕੀ ਹੈ" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "ਖਾਸ ਸ਼ੈਸ਼ਨ ਲਈ ਇੱਕ ਐਂਟਰੀ ਬਣਾ/ਹਟਾ ਨਹੀਂ ਸਕਦਾ" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਸਰਵਿਸ ਉਪਭੋਗੀ ਅਧਿਕਾਰ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕਦਾ" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "ਉਪਭੋਗੀ ਅਧਿਕਾਰ ਖਤਮ ਹੋ ਗਏ ਹਨ" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "ਉਪਭੋਗੀ ਅਧਿਕਾਰ ਸੈੱਟ ਕਰਨ ਵਿੱਚ ਫੇਲ" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "ਕੋਈ ਮੈਡਿਊਲ ਸੰਬੰਧੀ ਡਾਟਾ ਮੌਜੂਦ ਨਹੀਂ ਹੈ" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "ਗਲਤ ਇਕਾਈਆਂ pam_*_item() ਨੂੰ ਪਾਸ ਕੀਤੀਆਂ ਹਨ" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "ਤਬਦੀਲੀ ਗਲਤੀ" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਟੋਕਨ ਸੋਧ ਗਲਤੀ" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਜਾਣਕਾਰੀ ਰਿਕਵਰ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਟੋਕਨ ਲਾਕ ਬਿਜ਼ੀ ਹੈ" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਟੋਕਲ ਏਜਿੰਗ ਅਯੋਗ ਹੈ" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "ਪਾਸਵਰਡ ਸਰਵਿਸ ਦੁਆਰਾ ਪਹਿਲੀ ਜਾਂਚ ਫੇਲ ਹੋਈ" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "ਰਿਟਰਨ ਮੁੱਲ PAM ਡਿਸਪੈਚ ਦੁਆਰਾ ਅਣਡਿੱਠਾ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "ਮੈਡੀਊਲ ਅਣਜਾਣ ਹੈ" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "ਪਰਮਾਣਕਿਤਾ ਟੋਕਨ ਦੀ ਮਿਆਦ ਪੁੱਗ ਚੁੱਕੀ ਹੈ" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "ਗੱਲਬਾਤ ਕਿਸੇ ਘਟਨਾ ਦੀ ਉਡੀਕ ਵਿੱਚ ਹੈ" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "ਕਾਰਜ ਲਈ ਫਿਰ libpam ਨੂੰ ਕਾਲ ਕਰਨ ਦੀ ਲੋੜ ਹੈ" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "ਅਣਜਾਣ PAM ਗਲਤੀ" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "ਪੁਰਾਣੇ ਵਰਗਾ ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "ਮੈਮੋਰੀ ਨਿਰਧਾਰਨ ਗਲਤੀ" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "ਇੱਕ palindrome ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "ਸਿਰਫ ਅੱਖਰ ਤਬਦੀਲੀ" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "ਪੁਰਾਣੇ ਨਾਲ ਬਹੁਤ ਮਿਲਦਾ-ਜੁਲਦਾ ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "ਬਹੁਤ ਸਧਾਰਨ ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "ਘੁੰਮਾਇਆ ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "ਲੋੜੀਂਦੀਆਂ ਅੱਖਰ ਸ਼੍ਰੇਣੀਆਂ ਨਹੀਂ ਹਨ" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "ਲਗਾਤਾਰ ਬਹੁਤ ਸਾਰੇ ਮਿਲਦੇ-ਜੁਲਦੇ ਅੱਖਰ ਸ਼ਾਮਿਲ ਹਨ" #: modules/pam_cracklib/pam_cracklib.c:664 msgid "contains too long of a monotonic character sequence" msgstr "ਇੱਕ ਬਹੁਤ ਜਿਆਦਾ ਲੰਬੀ ਇਕਸੁਰਤਾ ਵਾਲੀ ਅੱਖਰ ਲੜੀ ਸਮਾਈ ਹੋਈ ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "ਕੁਸੇ ਰੂਪ ਵਿੱਚ ਉਪਭੋਗੀ ਨਾਂ ਸ਼ਾਮਿਲ ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "ਕੋਈ ਪਾਸਵਰਡ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "ਪਾਸਵਰਡ ਨਾ-ਤਬਦੀਲ ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "ਗਲਤ ਪਾਸਵਰਡ: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s ਫੇਲ ਹੋਇਆ: ਕੋਡ %d ਨਾਲ ਬੰਦ ਹੋ ਗਿਆ" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s ਫੇਲ ਹੋ ਗਿਆ: ਸਿਗਨਲ %d%s ਮਿਲਿਆ" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s ਫੇਲ ਹੋਇਆ: ਅਣਪਛਾਤੀ ਸਥਿਤੀ 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %b %e %H:%M:%S %Z %Y" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " from %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " on %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "ਆਖਰੀ ਲਾਗਇਨ:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "ਤੁਹਾਡੇ ਨਵੇਂ ਖਾਤੇ ਵਿੱਚ ਜੀ ਆਇਆਂ ਨੂੰ!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "ਆਖਰੀ ਫੇਲ ਹੋਇਆ ਲਾਗਇਨ:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "ਪਿਛਲੇ ਸਫਲਤਾਪੂਰਕ ਲਾਗਇਨ ਤੋਂ ਬਾਇਦ %d ਫੇਲ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ ਹੈ।" msgstr[1] "ਪਿਛਲੇ ਸਫਲਤਾਪੂਰਕ ਲਾਗਇਨ ਤੋਂ ਬਾਇਦ %d ਫੇਲ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਹਨ।" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "ਪਿਛਲੇ ਸਫਲਤਾਪੂਰਕ ਲਾਗਇਨ ਤੋਂ ਬਾਇਦ %d ਫੇਲ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਹਨ।" #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "'%s' ਲਈ ਬਹੁਤ ਸਾਰੇ ਲਾਗਇਨ।" #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "ਕੋਈ ਮੇਲ ਨਹੀਂ।" #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "ਤੁਹਾਡੀ ਨਵੀਂ ਮੇਲ ਹੈ।" #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "ਤੁਹਾਡੀ ਪੁਰਾਣੀ ਮੇਲ ਹੈ।" #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "ਤੁਹਾਡੀ ਮੇਲ ਹੈ।" #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "ਫੋਲਡਰ %s ਵਿੱਚ ਤੁਹਾਡੀ ਕੋਈ ਮੇਲ ਨਹੀਂ ਹੈ।" #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "ਫੋਲਡਰ %s ਵਿੱਚ ਤੁਹਾਡੀ ਨਵੀਂ ਮੇਲ ਹੈ।" #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "ਫੋਲਡਰ %s ਵਿੱਚ ਤੁਹਾਡੀ ਪੁਰਾਣੀ ਮੇਲ ਹੈ।" #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "ਫੇਲਡਰ %s ਵਿੱਚ ਤੁਹਾਡੀ ਮੇਲ ਹੈ।" #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਬਣਾ ਰਿਹਾ ਹੈ।" #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਨੂੰ ਬਣਾਉਣ ਅਤੇ ਸ਼ੁਰੂ ਕਰਨ ਵਿੱਚ ਅਸਮਰਥ।" #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "ਪਾਸਵਰਡ ਪਹਿਲਾਂ ਵੀ ਵਰਤਿਆ ਗਿਆ ਹੈ। ਵੱਖਰਾ ਚੁਣੋ।" #: modules/pam_pwhistory/pam_pwhistory.c:224 msgid "Password has been already used." msgstr "ਗੁਪਤ-ਸ਼ਬਦ ਪਹਿਲਾਂ ਹੀ ਵਰਤਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।" #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "ਮੂਲ ਸੁਰੱਖਿਆ ਪ੍ਰਸੰਗ %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "ਕੀ ਤੁਸੀਂ ਇੱਕ ਵੱਖਰਾ ਰੋਲ ਜਾਂ ਲੈਵਲ ਦੇਣਾ ਚਾਹੁੰਦੇ ਹੋ?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "ਰੋਲ:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "ਰੋਲ %s ਵਾਲੀ ਕੋਈ ਮੂਲ ਕਿਸਮ ਨਹੀਂ ਹੈ\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "ਲੈਵਲ:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "ਇੱਕ ਠੀਕ ਸੁਰੱਖਿਆ ਪਰਸੰਗ ਨਹੀਂ" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "%s ਲਈ ਯੋਗ ਪ੍ਰਸੰਗ ਲੈਣ ਵਿੱਚ ਅਸਮਰਥ" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "ਸੁਰੱਖਿਆ ਪ੍ਰਸੰਗ %s ਨਿਰਧਾਰਤ ਕੀਤਾ" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "ਕੁੰਜੀ ਬਣਾਉਣ ਪ੍ਰਸੰਗ %s ਨਿਰਧਾਰਤ ਕੀਤਾ" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "PAM ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਫੇਲ\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "pam_set_item() ਲਈ ਫੇਲ\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "ਲਾਗਇਨ: ਫੋਰਕਿੰਗ ਫੇਲ: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "%s ਲਈ STRESS ਪਾਸਵਰਡ ਤਬਦੀਲ ਕਰ ਰਿਹਾ ਹੈ।" #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "ਨਵਾਂ STRESS ਪਾਸਵਰਡ ਦਿਓ: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "ਨਵਾਂ STRESS ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "ਗਲਤ-ਟਾਈਪ ਜਾਂਚ; ਪਾਸਵਰਡ ਨਾ-ਤਬਦੀਲ" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "ਖਾਤਾ ਆਰਜੀ ਤੌਰ ਤੇ ਲਾਕ ਕੀਤਾ ਹੈ (%ld ਸਕਿੰਟ ਬਾਕੀ ਹਨ)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u ਫੇਲ ਹੋਏ ਲਾਗਇਨਾਂ ਕਰਕੇ ਖਾਤਾ ਲਾਕ ਕੀਤਾ ਹੈ" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "ਪਰਮਾਣਕਿਤਾ ਗਲਤੀ" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "ਸੇਵਾ ਗਲਤੀ" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "ਅਣਜਾਣ ਉਪਭੋਗੀ" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "ਅਣਜਾਣੀ ਗਲਤੀ" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: --reset= ਲਈ ਗਲਤ ਨੰਬਰ ਦਿੱਤਾ ਗਿਆ\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: ਬੇਪਛਾਣ ਚੋਣ %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: ਸਭ ਉਪਭੋਗੀਆਂ ਨੂੰ ਨਾਨ-ਜ਼ੀਰੋ ਰੀਸੈੱਟ ਨਹੀਂ ਕਰ ਸਕਦਾ\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Failures Latest failure From\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "ਪਹੁੰਚ ਰੱਦ ਕੀਤੀ (ਪਿਛਲੀ ਪਹੁੰਚ %ld ਸਕਿੰਟ ਪਹਿਲਾਂ ਸੀ)।" #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "ਤੁਹਾਡਾ ਖਾਤਾ ਮਿਆਦ ਪੁੱਗ ਗਈ ਹੈ; ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਸਿਸਟਮ ਪਰਬੰਧਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਤੁਰੰਤ ਤਬਦੀਲ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ (ਰੂਟ ਵੱਲੋਂ ਹਦਾਇਤ)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਤੁਰੰਤ ਤਬਦੀਲ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ (ਪਾਸਵਰਡ ਪੁਰਾਣਾ ਹੋ ਗਿਆ ਹੈ)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "ਚੇਤਾਵਨੀ: ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨ ਵਿੱਚ ਪੁੱਗ ਜਾਵੇਗੀ" msgstr[1] "ਚੇਤਾਵਨੀ: ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨਾਂ ਵਿੱਚ ਪੁੱਗ ਜਾਵੇਗੀ" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "ਚੇਤਾਵਨੀ: ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦੀ ਮਿਆਦ %d ਦਿਨਾਂ ਵਿੱਚ ਪੁੱਗ ਜਾਵੇਗੀ" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "NIS ਪਾਸਵਰਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।" #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "ਤੁਹਾਨੂੰ ਲੰਮੇ ਪਾਸਵਰਡ ਦੀ ਚੋਣ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "%s ਲਈ ਪਾਸਵਰਡ ਤਬਦੀਲ ਕਰ ਰਿਹਾ ਹੈ।" #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(ਮੌਜੂਦਾ) UNIX ਪਾਸਵਰਡ: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "ਤੁਹਾਨੂੰ ਲੰਬੇ ਸਮੇਂ ਲਈ ਆਪਣੇ ਪਾਸਵਰਡ ਲਈ ਉਡੀਕ ਕਰਨੀ ਪਵੇਗੀ" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "ਨਵਾਂ ਯੂਨਿਕਸ ਪਾਸਵਰਡ ਦਿਓ: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "ਨਵਾਂ ਯੂਨਿਕਸ ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ: " Linux-PAM-1.1.8/po/sk.po0000644000000000000000000004371512216527620011532 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Linux-PAM Project # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ondrej Šulek , 2008. # Pavol Šimo , 2009. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" "POT-Creation-Date: 2013-09-19 10:02+0200\n" "PO-Revision-Date: 2011-11-30 12:01+0000\n" "Last-Translator: Tomáš Mráz \n" "Language-Team: Slovak (http://www.transifex.net/projects/p/fedora/language/" "sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" #: libpam_misc/misc_conv.c:33 msgid "...Time is running out...\n" msgstr "...Odpočet bol spustený...\n" #: libpam_misc/misc_conv.c:34 msgid "...Sorry, your time is up!\n" msgstr "...Prepáčte, váš čas vypršal!\n" #: libpam_misc/misc_conv.c:342 #, c-format msgid "erroneous conversation (%d)\n" msgstr "chybná konverzácia (%d)\n" #: libpam/pam_get_authtok.c:39 modules/pam_exec/pam_exec.c:170 #: modules/pam_unix/pam_unix_auth.c:160 modules/pam_userdb/pam_userdb.c:64 msgid "Password: " msgstr "Heslo: " #: libpam/pam_get_authtok.c:41 modules/pam_cracklib/pam_cracklib.c:68 #, c-format msgid "New %s%spassword: " msgstr "Nové %s%sheslo: " #: libpam/pam_get_authtok.c:43 modules/pam_cracklib/pam_cracklib.c:70 #, c-format msgid "Retype new %s%spassword: " msgstr "Opakujte nové %s%sheslo: " #: libpam/pam_get_authtok.c:44 modules/pam_cracklib/pam_cracklib.c:71 msgid "Sorry, passwords do not match." msgstr "Prepáčte, heslá sa nezhodujú." #: libpam/pam_get_authtok.c:135 libpam/pam_get_authtok.c:211 #, c-format msgid "Retype %s" msgstr "Opakujte %s" #: libpam/pam_get_authtok.c:155 libpam/pam_get_authtok.c:227 msgid "Password change aborted." msgstr "Zmena hesla zrušená." #: libpam/pam_item.c:311 msgid "login:" msgstr "login:" #: libpam/pam_strerror.c:40 msgid "Success" msgstr "Úspech" #: libpam/pam_strerror.c:42 msgid "Critical error - immediate abort" msgstr "Kritická chyba - okamžité zrušenie" #: libpam/pam_strerror.c:44 msgid "Failed to load module" msgstr "Nepodarilo sa načítať modul" #: libpam/pam_strerror.c:46 msgid "Symbol not found" msgstr "Symbol nenájdený" #: libpam/pam_strerror.c:48 msgid "Error in service module" msgstr "Chyba v module služby" #: libpam/pam_strerror.c:50 msgid "System error" msgstr "Chyba systému" #: libpam/pam_strerror.c:52 msgid "Memory buffer error" msgstr "Chyba vyrovnávacej pamäte" #: libpam/pam_strerror.c:54 msgid "Permission denied" msgstr "Prístup odmietnutý" #: libpam/pam_strerror.c:56 msgid "Authentication failure" msgstr "Zlyhanie overenia" #: libpam/pam_strerror.c:58 msgid "Insufficient credentials to access authentication data" msgstr "Nedostatočné oprávnenia pre prístup k údajom overenia" #: libpam/pam_strerror.c:60 msgid "Authentication service cannot retrieve authentication info" msgstr "Overovacia služba nemôže získať informácie pre overenie" #: libpam/pam_strerror.c:62 msgid "User not known to the underlying authentication module" msgstr "Používateľ nie je známy pre podriadený overovací modul" #: libpam/pam_strerror.c:64 msgid "Have exhausted maximum number of retries for service" msgstr "Vyčerpaný maximálny počet pokusov pre službu" #: libpam/pam_strerror.c:66 msgid "Authentication token is no longer valid; new one required" msgstr "Overovací token už nie je platný; požadovaný je nový" #: libpam/pam_strerror.c:68 msgid "User account has expired" msgstr "Platnosť používateľského účtu vypršala" #: libpam/pam_strerror.c:70 msgid "Cannot make/remove an entry for the specified session" msgstr "Pre zadanú reláciu nie je možné vytvoriť/odstrániť záznam" #: libpam/pam_strerror.c:72 msgid "Authentication service cannot retrieve user credentials" msgstr "Overovacia služba nemôže získať oprávnenia používateľa" #: libpam/pam_strerror.c:74 msgid "User credentials expired" msgstr "Vypršala platnosť používateľského oprávnenia" #: libpam/pam_strerror.c:76 msgid "Failure setting user credentials" msgstr "Chyba pri nastavení oprávnení používateľa" #: libpam/pam_strerror.c:78 msgid "No module specific data is present" msgstr "Nie je možné nájsť dáta pre modul" #: libpam/pam_strerror.c:80 msgid "Bad item passed to pam_*_item()" msgstr "Funkcii pam_*_item() bola poslaná zlá položka" #: libpam/pam_strerror.c:82 msgid "Conversation error" msgstr "Chyba konverzácie" #: libpam/pam_strerror.c:84 msgid "Authentication token manipulation error" msgstr "Chyba pri manipulácii s overovacím tokenom" #: libpam/pam_strerror.c:86 msgid "Authentication information cannot be recovered" msgstr "Overovaciu informáciu nie je možné obnoviť" #: libpam/pam_strerror.c:88 msgid "Authentication token lock busy" msgstr "Overovací token je uzamknutý" #: libpam/pam_strerror.c:90 msgid "Authentication token aging disabled" msgstr "Starnutie overovacieho tokenu zakázané" #: libpam/pam_strerror.c:92 msgid "Failed preliminary check by password service" msgstr "Zlyhanie predbežnej kontroly v službe hesla" #: libpam/pam_strerror.c:94 msgid "The return value should be ignored by PAM dispatch" msgstr "Návratová hodnota by mala byť ignorovaná mechanizmom PAM" #: libpam/pam_strerror.c:96 msgid "Module is unknown" msgstr "Neznámy modul" #: libpam/pam_strerror.c:98 msgid "Authentication token expired" msgstr "Vypršala platnosť overovacieho tokenu" #: libpam/pam_strerror.c:100 msgid "Conversation is waiting for event" msgstr "Konverzácia čaká na udalosť" #: libpam/pam_strerror.c:102 msgid "Application needs to call libpam again" msgstr "Aplikácia musí znovu zavolať libpam" #: libpam/pam_strerror.c:105 msgid "Unknown PAM error" msgstr "Neznáme chyba PAM" #: modules/pam_cracklib/pam_cracklib.c:618 msgid "is the same as the old one" msgstr "je rovnaké ako predchádzajúce" #: modules/pam_cracklib/pam_cracklib.c:624 #: modules/pam_cracklib/pam_cracklib.c:628 #: modules/pam_cracklib/pam_cracklib.c:638 msgid "memory allocation error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:643 msgid "is a palindrome" msgstr "je palindróm" #: modules/pam_cracklib/pam_cracklib.c:646 msgid "case changes only" msgstr "len zmena veľkosti" #: modules/pam_cracklib/pam_cracklib.c:649 msgid "is too similar to the old one" msgstr "je príliš podobné predchádzajúcemu" #: modules/pam_cracklib/pam_cracklib.c:652 msgid "is too simple" msgstr "je príliš jednoduché" #: modules/pam_cracklib/pam_cracklib.c:655 msgid "is rotated" msgstr "je otočené" #: modules/pam_cracklib/pam_cracklib.c:658 msgid "not enough character classes" msgstr "nedostatok rôznych druhov znakov" #: modules/pam_cracklib/pam_cracklib.c:661 msgid "contains too many same characters consecutively" msgstr "obsahuje príliš veľa rovnakých znakov za sebou" #: modules/pam_cracklib/pam_cracklib.c:664 #, fuzzy msgid "contains too long of a monotonic character sequence" msgstr "obsahuje príliš veľa rovnakých znakov za sebou" #: modules/pam_cracklib/pam_cracklib.c:667 msgid "contains the user name in some form" msgstr "obsahuje v nejakej forme používateľské meno" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "No password supplied" msgstr "Heslo nezadané" #: modules/pam_cracklib/pam_cracklib.c:701 #: modules/pam_unix/pam_unix_passwd.c:496 msgid "Password unchanged" msgstr "Heslo nebolo zmenené" #: modules/pam_cracklib/pam_cracklib.c:721 #: modules/pam_cracklib/pam_cracklib.c:803 #, c-format msgid "BAD PASSWORD: %s" msgstr "NESPRÁVNE HESLO: %s" #: modules/pam_exec/pam_exec.c:273 #, c-format msgid "%s failed: exit code %d" msgstr "%s zlyhalo: výstupný kód %d" #: modules/pam_exec/pam_exec.c:282 #, c-format msgid "%s failed: caught signal %d%s" msgstr "%s zlyhalo: dostal signál %d%s" #: modules/pam_exec/pam_exec.c:291 #, c-format msgid "%s failed: unknown status 0x%x" msgstr "%s zlyhalo: neznámy stav 0x%x" #. TRANSLATORS: "strftime options for date of last login" #: modules/pam_lastlog/pam_lastlog.c:282 modules/pam_lastlog/pam_lastlog.c:496 msgid " %a %b %e %H:%M:%S %Z %Y" msgstr " %a %d.%m.%Y %H:%M:%S %Z" #. TRANSLATORS: " from " #: modules/pam_lastlog/pam_lastlog.c:291 modules/pam_lastlog/pam_lastlog.c:505 #, c-format msgid " from %.*s" msgstr " z %.*s" #. TRANSLATORS: " on " #: modules/pam_lastlog/pam_lastlog.c:303 modules/pam_lastlog/pam_lastlog.c:517 #, c-format msgid " on %.*s" msgstr " na %.*s" #. TRANSLATORS: "Last login: from on " #: modules/pam_lastlog/pam_lastlog.c:313 #, c-format msgid "Last login:%s%s%s" msgstr "Posledné prihlásenie:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:319 msgid "Welcome to your new account!" msgstr "Vitajte vo vašom novom účte!" #. TRANSLATORS: "Last failed login: from on " #: modules/pam_lastlog/pam_lastlog.c:527 #, c-format msgid "Last failed login:%s%s%s" msgstr "Posledné neúspešné prihlásenie:%s%s%s" #: modules/pam_lastlog/pam_lastlog.c:536 modules/pam_lastlog/pam_lastlog.c:543 #, c-format msgid "There was %d failed login attempt since the last successful login." msgid_plural "" "There were %d failed login attempts since the last successful login." msgstr[0] "" "Od posledného úspešného prihlásenia došlo k %d neúspešnému pokusu o " "prihlásenie." msgstr[1] "" "Od posledného úspešného prihlásenia došlo k %d neúspešným pokusom o " "prihlásenie." msgstr[2] "" "Od posledného úspešného prihlásenia došlo k %d neúspešným pokusom o " "prihlásenie." #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_lastlog/pam_lastlog.c:548 #, c-format msgid "There were %d failed login attempts since the last successful login." msgstr "" "Od posledného úspešného prihlásenia došlo k %d neúspešným pokusom o " "prihlásenie." #: modules/pam_limits/pam_limits.c:1079 #, c-format msgid "Too many logins for '%s'." msgstr "Príliš veľa prihlásení pre '%s'." #: modules/pam_mail/pam_mail.c:297 msgid "No mail." msgstr "Žiadna pošta." #: modules/pam_mail/pam_mail.c:300 msgid "You have new mail." msgstr "Máte novú poštu." #: modules/pam_mail/pam_mail.c:303 msgid "You have old mail." msgstr "Máte starú poštu." #: modules/pam_mail/pam_mail.c:307 msgid "You have mail." msgstr "Máte poštu." #: modules/pam_mail/pam_mail.c:314 #, c-format msgid "You have no mail in folder %s." msgstr "Nemáte žiadnu poštu v priečinku %s." #: modules/pam_mail/pam_mail.c:318 #, c-format msgid "You have new mail in folder %s." msgstr "Máte novú poštu v priečinku %s." #: modules/pam_mail/pam_mail.c:322 #, c-format msgid "You have old mail in folder %s." msgstr "Máte starú poštu v priečinku %s." #: modules/pam_mail/pam_mail.c:327 #, c-format msgid "You have mail in folder %s." msgstr "Máte poštu v priečinku %s." #: modules/pam_mkhomedir/pam_mkhomedir.c:113 #, c-format msgid "Creating directory '%s'." msgstr "Vytváranie priečinka '%s'." #: modules/pam_mkhomedir/pam_mkhomedir.c:183 #, c-format msgid "Unable to create and initialize directory '%s'." msgstr "Nedá sa vytvoriť a inicializovať priečinok '%s'." #: modules/pam_pwhistory/pam_pwhistory.c:217 #: modules/pam_unix/pam_unix_passwd.c:517 msgid "Password has been already used. Choose another." msgstr "Heslo už bolo použité. Zvoľte si iné." #: modules/pam_pwhistory/pam_pwhistory.c:224 #, fuzzy msgid "Password has been already used." msgstr "Heslo už bolo použité. Zvoľte si iné." #: modules/pam_selinux/pam_selinux.c:210 #, c-format msgid "Default Security Context %s\n" msgstr "Predvolený kontext zabezpečenia %s\n" #: modules/pam_selinux/pam_selinux.c:214 msgid "Would you like to enter a different role or level?" msgstr "Želáte si zadať inú rolu alebo úroveň?" #: modules/pam_selinux/pam_selinux.c:227 msgid "role:" msgstr "rola:" #: modules/pam_selinux/pam_selinux.c:230 #, c-format msgid "No default type for role %s\n" msgstr "Chýba predvolený typ pre rolu %s\n" #: modules/pam_selinux/pam_selinux.c:262 msgid "level:" msgstr "úroveň:" #: modules/pam_selinux/pam_selinux.c:295 msgid "Not a valid security context" msgstr "Neplatný kontext zabezpečenia" #: modules/pam_selinux/pam_selinux.c:539 #, c-format msgid "Unable to get valid context for %s" msgstr "Nepodarilo sa získať platný kontext zabezpečenia pre %s" #: modules/pam_selinux/pam_selinux.c:658 #, c-format msgid "Security Context %s Assigned" msgstr "Kontext zabezpečenia %s pridelený" #: modules/pam_selinux/pam_selinux.c:674 #, c-format msgid "Key Creation Context %s Assigned" msgstr "Kontext zabezpečenia pre vytváranie kľúčov %s pridelený" #: modules/pam_selinux/pam_selinux_check.c:99 #, c-format msgid "failed to initialize PAM\n" msgstr "chyba pri inicializácii PAM\n" #: modules/pam_selinux/pam_selinux_check.c:105 #, c-format msgid "failed to pam_set_item()\n" msgstr "chyba pri pam_set_item()\n" #: modules/pam_selinux/pam_selinux_check.c:133 #, c-format msgid "login: failure forking: %m" msgstr "login: chyba forku: %m" #: modules/pam_stress/pam_stress.c:476 #, c-format msgid "Changing STRESS password for %s." msgstr "Zmena STRESS hesla pre %s." #: modules/pam_stress/pam_stress.c:490 msgid "Enter new STRESS password: " msgstr "Zadajte nové STRESS heslo: " #: modules/pam_stress/pam_stress.c:493 msgid "Retype new STRESS password: " msgstr "Znovu zadajte nové STRESS heslo: " #: modules/pam_stress/pam_stress.c:522 msgid "Verification mis-typed; password unchanged" msgstr "Chybné potvrdenie; heslo nezmenené" #: modules/pam_tally/pam_tally.c:541 modules/pam_tally2/pam_tally2.c:599 #, c-format msgid "Account temporary locked (%ld seconds left)" msgstr "Účet dočasne uzamknutý (zostáva %ld sekúnd)" #: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:578 #, c-format msgid "Account locked due to %u failed logins" msgstr "Účet uzamknutý z dôvodu %u neúspešných prihlásení" #: modules/pam_tally/pam_tally.c:777 modules/pam_tally2/pam_tally2.c:887 msgid "Authentication error" msgstr "Chyba overenia" #: modules/pam_tally/pam_tally.c:778 modules/pam_tally2/pam_tally2.c:888 msgid "Service error" msgstr "Chyba služby" #: modules/pam_tally/pam_tally.c:779 modules/pam_tally2/pam_tally2.c:889 msgid "Unknown user" msgstr "Neznámy používateľ" #: modules/pam_tally/pam_tally.c:780 modules/pam_tally2/pam_tally2.c:890 msgid "Unknown error" msgstr "Neznáma chyba" #: modules/pam_tally/pam_tally.c:796 modules/pam_tally2/pam_tally2.c:909 #, c-format msgid "%s: Bad number given to --reset=\n" msgstr "%s: Zadané zlé číslo pre --reset=\n" #: modules/pam_tally/pam_tally.c:800 modules/pam_tally2/pam_tally2.c:913 #, c-format msgid "%s: Unrecognised option %s\n" msgstr "%s: Neznáma voľba %s\n" #: modules/pam_tally/pam_tally.c:812 #, c-format msgid "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [--file meno_suboru] [--user pouzivatelske_meno] [--reset[=n]] [--" "quiet]\n" #: modules/pam_tally/pam_tally.c:886 modules/pam_tally2/pam_tally2.c:1039 #, c-format msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Nedá sa resetovať všetkých používateľov nenulovo\n" #: modules/pam_tally2/pam_tally2.c:940 #, c-format msgid "Login Failures Latest failure From\n" msgstr "Login Zlyhaní Ostatné zlyhanie Z\n" #: modules/pam_tally2/pam_tally2.c:956 #, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" "%s: [-f meno_suboru] [--file meno_suboru]\n" " [-u pouzivatelske_meno] [--user pouzivatelske_meno]\n" " [-r] [--reset[=n]] [--quiet]\n" #: modules/pam_timestamp/pam_timestamp.c:345 #, c-format msgid "Access granted (last access was %ld seconds ago)." msgstr "Prístup povolený (ostatný prístup pred %ld sekundami)." #: modules/pam_unix/pam_unix_acct.c:247 modules/pam_unix/pam_unix_acct.c:269 msgid "Your account has expired; please contact your system administrator" msgstr "" "Platnosť vášho účtu vypršala; kontaktujte prosím svojho správcu systému" #: modules/pam_unix/pam_unix_acct.c:255 msgid "You are required to change your password immediately (root enforced)" msgstr "Je vyžadovaná okamžitá zmena vašeho hesla (vynútené správcom)" #: modules/pam_unix/pam_unix_acct.c:261 msgid "You are required to change your password immediately (password aged)" msgstr "Je vyžadovaná okamžitá zmena vašeho hesla (heslo vypršalo)" #: modules/pam_unix/pam_unix_acct.c:282 modules/pam_unix/pam_unix_acct.c:289 #, c-format msgid "Warning: your password will expire in %d day" msgid_plural "Warning: your password will expire in %d days" msgstr[0] "Upozornenie: vaše heslo vyprší za %d deň" msgstr[1] "Upozornenie: vaše heslo vyprší za %d dni" msgstr[2] "Upozornenie: vaše heslo vyprší za %d dní" #. TRANSLATORS: only used if dngettext is not supported #: modules/pam_unix/pam_unix_acct.c:294 #, c-format msgid "Warning: your password will expire in %d days" msgstr "Upozornenie: vaše heslo vyprší za %d dní" #: modules/pam_unix/pam_unix_passwd.c:398 msgid "NIS password could not be changed." msgstr "Nie je možné zmeniť NIS heslo." #: modules/pam_unix/pam_unix_passwd.c:513 msgid "You must choose a longer password" msgstr "Musíte si zvoliť dlhšie heslo" #: modules/pam_unix/pam_unix_passwd.c:619 #, c-format msgid "Changing password for %s." msgstr "Zmena hesla pre %s." #: modules/pam_unix/pam_unix_passwd.c:630 msgid "(current) UNIX password: " msgstr "(aktuálne) UNIX heslo: " #: modules/pam_unix/pam_unix_passwd.c:665 msgid "You must wait longer to change your password" msgstr "Na zmenu svojho hesla musíte počkať dlhšie" #: modules/pam_unix/pam_unix_passwd.c:725 msgid "Enter new UNIX password: " msgstr "Zadajte nové UNIX heslo: " #: modules/pam_unix/pam_unix_passwd.c:726 msgid "Retype new UNIX password: " msgstr "Opakujte nové UNIX heslo: " #~ msgid "Would you like to enter a security context? [N] " #~ msgstr "Želáte si zadať kontext zabezpečenia? [N] " Linux-PAM-1.1.8/po/lv.gmo0000644000000000000000000000102412216527620011665 00000000000000$,89Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2011-11-30 11:56+0000 Last-Translator: FULL NAME Language-Team: Latvian (http://www.transifex.com/projects/p/fedora/language/lv/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: lv Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2); Linux-PAM-1.1.8/po/ml.gmo0000644000000000000000000005150212216527620011662 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz %%h.m$Gu:O J !"oR#b#b%$$%&&{'(~(R);)|&**X+Q+76,ln,F,k"-x-P.NX.J..z/ 00L11p2E21E3;w343y38b4j4#5i*5O5r5W6~6t7O8#m8L8A8g 9y9w:z:(;=;;4;4<M<O<E>;>)?l?2.@.a@@@@wA#BBCEpFFGiHpHKcII[0JmJzJUuKlK8L(LlNN~OO.PKAPMP;P QJ"Q=mQ*Q QQdQb^RrR 4S,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2013-04-15 05:55+0000 Last-Translator: Ani Peter Language-Team: Malayalam MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ml Plural-Forms: nplurals=2; plural=(n != 1); %a %b %e %H:%M:%S %Z %Y %.*s-ല്‍ നിന്നും %.*s-ല്‍%s പരാ‍ജയപ്പെട്ടു: %d%s സിഗ്നല്‍ ലഭ്യമായിരിക്കുന്നു%s പരാ‍ജയപ്പെട്ടു: %d എന്ന കോഡില്‍ നിന്നും പുറത്ത് കടക്കുക%s പരാ‍ജയപ്പെട്ടു: അപരിചിതമായ 0x%x നിലവാരം%s:നല്‍കിയിരിക്കുന്ന നംബര്‍ തെറ്റാണ്, --reset= %s: എല്ലാ ഉപയോക്താക്കള്‍ക്കും പൂജ്യം അല്ലാതെ ക്രമികരിക്കുവാന്‍ സാധ്യമല്ല %s: Unrecognised ഉപാധി %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (നിലവിലുളളത്) UNIX രഅടയാളവാക്ക്: ...ക്ഷമിക്കണം, നിങ്ങളുടെ സമയം കഴിഞ്ഞിരിക്കുന്നു! ...സമയപരിധി അവസാനിക്കുന്നു... അനുവാദം നല്‍കിയിരിക്കുന്നു (ഒടുവില്‍ പ്രവേശിച്ചതു് %ld സെക്കന്‍ഡുകള്‍ക്കു് മുമ്പാണു്).%u പരാജയപ്പെട്ട ലോഗിനുകള്‍ കാരണം അക്കൌണ്ട് താല്‍ക്കാലികമായി പൂട്ടിയിരിക്കുന്നുഅക്കൌണ്ട് താല്‍ക്കാലികമായി പൂട്ടിയിരിക്കുന്നു (%ld നിമിഷങ്ങള്‍ ബാക്കി)പ്രയോഗങ്ങള്‍ക്ക് വീണ്ടും libpam ആവശ്യമുണ്ട്ആധികാരികത ഉറപ്പാക്കുന്നതില്‍ പിശക്ആധികാരികത ഉറപ്പാക്കുന്നതില്‍ പിശക്ഓഥന്റിക്കേഷന്‍ വിവരം വീണ്ടെടുക്കുവാന്‍ സാധ്യമല്ലആധികാരികത ഉറപ്പാക്കുന്ന സര്‍വീസിന്, ആവശ്യമുളള വിവരങ്ങള്‍ ലഭ്യമാക്കുവാന്‍ സാധ്യമായില്ലഓഥന്റിക്കേഷന്‍ സര്‍വീസിന് ഉപയോക്താവിന്റെ വിവരങ്ങള്‍ ലഭ്യമാക്കുവാന്‍ സാധ്യമായില്ലഓഥന്റിക്കേഷന്‍ ടോക്കന്‍ ഏജിങ് പ്രവര്‍ത്തന രഹിതമാണ്ഓഥന്റിക്കേഷന്‍ ടോക്കന്റെ കാലാവധി അവസാനിച്ചിരിക്കുന്നുഓഥന്റിക്കേഷന്‍ ടോക്കന്റെ കാലാവധി കഴിഞ്ഞിരിക്കുന്നു; പുതിയത് നല്‍കുകഓഥന്റിക്കേഷന്‍ ടോക്കന്‍ ലോക്ക് ഉപയോഗത്തിലാണ്ഓഫന്റിക്കേഷന്‍ ടോക്കന്‍ കൈകാര്യം ചെയ്യുന്നതില്‍ പിശക്തെറ്റായ അടയാളവാക്ക്: %spam_*_item()-ലേക്ക് തെറ്റായ വസ്തു നല്‍കിയിരിക്കുന്നുപറഞ്ഞിരിക്കുന്ന സെഷന് ആവശ്യമുളള എന്‍ട്രി ഉണ്ടാക്കുവാനോ നീക്കുവാനോ സാധ്യമാകുന്നല്ല%s-നുളള STRESS അടയാളവാക്ക് മാറ്റുന്നു.%s-നുളള അടയാളവാക്ക് മാറ്റുന്നു.സംവാദത്തിലുളള പിശക്സംവാദം ഒരു ഇവന്റിനായി കാത്തിരിക്കുന്നു'%s' ഡയറക്ടറി ഉണ്ടാക്കുന്നു.ഗുരുതരമായ പിശക് - ഉടന്‍ അവസാനിപ്പിക്കുകസ്വതവേയുള്ള സെക്യൂരിറ്റി കോണ്‍ടെക്സ്റ്റ് %s പുതിയ STRESS അടയാളവാക്ക് നല്‍കുക: പുതിയ UNIX അടയാളവാക്ക് നല്‍കുക: സര്‍വീസ് മൊഡ്യൂളില്‍ പിഴവ്അടയാളവാക്ക് സര്‍വീസിന്റെ ആദ്യത്തെ പരിശോധന പരാജയപ്പെട്ടുമൊഡ്യൂള്‍ ലഭ്യമാക്കുന്നതില്‍ പരാജയപ്പെട്ടുഉപയോക്താവിനുള്ള ആനുകൂല്യങ്ങള്‍ ക്രമികരിക്കുന്നതില്‍ പരാജയപ്പെട്ടുസര്‍വീസ് ഇനി ലഭ്യമാക്കുവാന്‍ സാധ്യമാകുന്നതല്ലആധികാരികത ഉറപ്പാക്കുന്നതിന് മതിയായ ഡേറ്റാ ലഭ്യമാല്ലകീ ഉണ്ടാക്കുന്നതിനുള്ള കോണ്‍ടെക്സ്റ്റ് ആയ %s നല്‍കിയിരിക്കുന്നുഅവസാനം ലോഗിന്‍ ചെയ്തതു് പരാജയപ്പെട്ടു:%s%s%sഅവസാനം ലോഗിന്‍ ചെയ്തത്:%s%s%sLogin Failures Latest failure From മെമ്മറി ബഫറില്‍ പിശക്മൊഡ്യൂള്‍ ലഭ്യമല്ലNIS അടയാളവാക്ക് മാറ്റുവാന്‍ സാധ്യമാകുന്നില്ല.പുതിയ %s%s അടയാളവാക്ക്: %s ജോലിയ്ക്കു് സ്വതവേയുള്ള തരം ലഭ്യമല്ല മെയില്‍ ഇല്ല.മൊഡ്യൂള്‍ അനുസരിച്ചുളള ഡേറ്റ ലഭ്യമല്ലഅടയാളവാക്ക് നല്‍കിയിട്ടില്ലശരിയായ സെക്യൂരിറ്റി കോണ്‍ടെക്സ്റ്റ് അല്ലഅടയാളവാക്ക് മാറ്റം വരുത്തുന്നതു് നിര്‍ത്തിയിരിക്കുന്നു.രഹസ്യവാക്ക് നിലവില്‍ ഉപയോഗിച്ചിരിയ്ക്കുന്നു.അടയാളവാക്ക് നിലവില്‍ ഉപയോഗിത്തിലുള്ളതാണ്. മറ്റൊന്ന് നല്‍കുക.അടയാളവാക്ക് മാറ്റിയിട്ടില്ലഅടയാളവാക്ക്: പ്രവേശനം അനുവദിക്കുന്നതല്ല%s വീണ്ടും ടൈപ്പ് ചെയ്യുകവീണ്ടും %s%s അടയാളവാക്ക് ടൈപ്പ് ചെയ്യുക: പുതിയ STRESS അടയാളവാക്ക് വീണ്ടും ടൈപ്പ് ചെയ്യുക: പുതിയ UNIX അടയാളവാക്ക് വീണ്ടും ടൈപ്പ് ചെയ്യുക: %s എന്ന സെക്യൂരിറ്റി കോണ്‍ടെക്സ്റ്റ് നല്‍കിയിരിക്കുന്നുസര്‍വീസ് പിശക്ക്ഷമിക്കണം, അടയാളവാക്കുകള്‍ തമ്മില്‍ ചേരുന്നില്ല.വിജയിച്ചുചിഹ്നം ലഭ്യമായില്ലസിസ്റ്റമില്‍ പിഴവ്തിരികെ നല്‍കുന്ന മൂല്ല്യം PAM ഡിസ്പാച്ച് അവഗണിക്കേണ്ടതാകുന്നുശരിയായി അവസാനം ലോഗിന്‍ ചെയ്ത ശേഷം %d തവണ ലോഗിന്‍ പരാജയപ്പെട്ടു.ശരിയായി അവസാനം ലോഗിന്‍ ചെയ്ത ശേഷം %d തവണ ലോഗിന്‍ പരാജയപ്പെട്ടു.ശരിയായി അവസാനം ലോഗിന്‍ ചെയ്ത ശേഷം %d തവണ ലോഗിന്‍ പരാജയപ്പെട്ടു.'%s'-ന് അനവധി ലോഗിനുകള്‍.%s ഡയറക്ടറി ഉണ്ടാക്കുവാനും ആരംഭിക്കുവാനും സാധ്യമായില്ല.%s-നുള്ള ശരിയായ കോണ്‍ടെക്സ്റ്റ് ലഭ്യമല്ലഅപരിചിതമായ PAM പിശക്അപരിചിതമായ പിശക്അപരിചിതമായ ഉപയോക്താവു്ഉപയോക്താവിന്റെ അക്കൌണ്ടിന്റെ കാലാവധി അവസാനിച്ചിരിക്കുന്നുഉപയോക്താവിന്റെ ആനുകൂല്യങ്ങളുടെ കാലാവധി അവസാനിച്ചിരിക്കുന്നുപറഞ്ഞിരിക്കുന്ന ഓഥന്റിക്കേഷന്‍ മൊഡ്യൂളില്‍ ഉപയോക്താവു് ലഭ്യമല്ലഅടയാളവാക്ക് ഉറപ്പാക്കുന്നതിനായി ടൈപ്പ് ചെയ്തത് തെറ്റാണ്; അടയാളവാക്ക് മാറ്റിയിട്ടില്ലമുന്നറിയിപ്പ്: നിങ്ങളുടെ അടയാളവാക്കിന്റെ കാലാവധി %d ദിവസത്തിനുള്ളില്‍ അവസാനിക്കുന്നുമുന്നറിയിപ്പ്: നിങ്ങളുടെ അടയാളവാക്കിന്റെ കാലാവധി %d ദിവസത്തിനുള്ളില്‍ അവസാനിക്കുന്നുമുന്നറിയിപ്പ്: നിങ്ങളുടെ അടയാളവാക്കിന്റെ കാലാവധി %d ദിവസത്തിനുള്ളില്‍ അവസാനിക്കുന്നുനിങ്ങളുടെ പുതിയ അക്കൌണ്ടിലേക്ക് സ്വാഗതം!നിങ്ങള്‍ക്കു് മറ്റൊരു ജോലി അല്ലെങ്കില്‍ നില നല്‍കണമോ?നിങ്ങളുടെ അടയാളവാക്ക് ഉടനെ മാറ്റേണ്ടതുണ്ട് (അടയാളവാക്ക് മാറ്റുന്നതിന് സമയമായി)നിങ്ങളുടെ അടയാളവാക്ക് ഉടനെ മാറ്റേണ്ടതുണ്ട് (root enforced)%s ഫോള്‍ഡറില്‍ നിങ്ങള്‍ക്ക് മെയില്‍ ഉണ്ട്.നിങ്ങള്‍ക്ക് മെയില്‍ ഉണ്ട്.%s ഫോള്‍ഡറില്‍ നിങ്ങള്‍ക്ക് പുതിയ മെയില്‍ ഉണ്ട്.നിങ്ങള്‍ക്ക് പുതിയ മെയില്‍ ഉണ്ട്.%s ഫോള്‍ഡറില്‍ നിങ്ങള്‍ക്ക് മെയില്‍ ഇല്ല.%s ഫോള്‍ഡറില്‍ നിങ്ങള്‍ക്ക് പഴയ മെയില്‍ ഉണ്ട്.നിങ്ങള്‍ക്ക് പഴയ മെയില്‍ ഉണ്ട്.ഇതിലും വലിയ അടയാളവാക്ക് തിരഞ്ഞെടുക്കുകനിങ്ങളുടെ അടയാളവാക്ക് മാറ്റുന്നതിനായി ഇനിയും കാത്തിരിക്കേണ്ടതാണ്.നിങ്ങളുടെ അക്കൌണ്ടിന്റെ കാലാവധി അവസാനിച്ചിരിക്കുന്നു; ദയവായി സിസ്റ്റം അഡ്മിനിസ്ട്രേറ്ററുമായി ബന്ധപ്പെടുകഅക്ഷരങ്ങളുടെ വലിപ്പം മാത്രം മാറുന്നതു്ഉപയോക്താവിന്റെ നാമം ഏതെങ്കിലും ഒരു തരത്തിലുണ്ടു്വളരെയധികം ഒരേ തരത്തിലുള്ള അക്ഷരങ്ങളടങ്ങുന്നുഅടുത്തടുത്ത് ഒരേപോലുള്ള അനവധി അക്ഷരങ്ങളുണ്ടു്തെറ്റായ സംവാദം (%d) PAM ആരംഭിക്കുന്നതില്‍ പരാജയം pam_set_item() ചെയ്യുന്നതില്‍ പരാജയം ഒരു പാലിന്‍ഡ്രോം ആണു്is rotatedപഴയത് പോലെ തന്നെയാകുന്നതു്പഴയതിന് സാമ്യമുള്ളതു്സാധാരണയുള്ളതു്നില: ലോഗിന്‍:login: ഫോര്‍ക്ക് ചെയ്യുന്നതില്‍ പരാജയം: %mമെമ്മറി അനുവദിയ്ക്കുന്നതില്‍ പിശക്മതിയായ ക്യാരക്ടര്‍ ക്ലാസ്സുകള്‍ ലഭ്യമല്ലജോലി:Linux-PAM-1.1.8/po/pl.gmo0000644000000000000000000002737312216527620011676 00000000000000{h i     ! & 4 GP u  ( D 1_ & + &   .7 :f 7 #  9T's5 #=!Pr ,D Z4{6 !13ey"" <U/u  1 N\{ 2D\/"  .;T6m*Z-*X2uDD2N]}!,B1t#3/+E_ oz % (-1&_)'6R+~  21C:u=+#24VII2 R Dq , 4 !+,!5X! !!!!!,"&<"#c"!""="$";$#2`#M#/#"$4$;N$$$$$"$%%#%I%'[%%%1%% & & &*;&'f&%&.&&!& ''7'9F''Le(#(2(2 )<)P)`)u)&)@)=)}7*(**#*<+B\+++++ , +,#L, p,/,D,&-+--/Y-/--%-"-.*.9.&S.z...*....,b*K.J{]vcrSM [HXy9 n<z?q_8 'pl/0DBQm#C=\-fIE"YOG@Ak6od57F 1!NW3u^> )+ LsU&gRe4hixT`%a(P$:jtVZ2;w %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too long of a monotonic character sequencecontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-12-12 19:19+0000 Last-Translator: Piotr Drąg Language-Team: Polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pl Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); %a %b %e %H:%M:%S %Z %Y z %.*s na %.*s%s nie powiodło się: otrzymano sygnał %d%s%s nie powiodło się: kod wyjścia %d%s nie powiodło się: nieznany stan 0x%x%s: podano błędny numer dla --reset= %s: nie można przywrócić wszystkich użytkowników %s: nierozpoznana opcja %s %s: [--file nazwa-pliku-root] [--user nazwa-użytkownika] [--reset[=n]] [--quiet] %s: [-f nazwa-pliku-root] [--file nazwa-pliku-root] [-u nazwa-użytkownika] [--user nazwa-użytkownika] [-r] [--reset[=n]] [--quiet] (obecne) hasło UNIX:...czas minął. ...czas mija... Nadano dostęp (ostatni dostęp %ld sekund temu).Konto zostało zablokowane z powodu %u nieudanych logowańKonto zostało tymczasowo zablokowane (pozostało %ld sekund)Aplikacja musi jeszcze raz wywołać libpamBłąd uwierzytelnianiaUwierzytelnienie się nie powiodłoNie można odzyskać informacji uwierzytelniającychUsługa uwierzytelniania nie może uzyskać informacji o uwierzytelnianiuUsługa uwierzytelniania nie może uzyskać uwierzytelnienia użytkownikaWygasanie tokenu uwierzytelniania jest wyłączoneToken uwierzytelniania wygasłToken uwierzytelniania nie jest już prawidłowy; wymagany jest nowyBlokada tokenu uwierzytelniania jest zajętaBłąd podczas modyfikowania tokenu uwierzytelnianiaBŁĘDNE HASŁO: %sBłędny element przekazany do pam_*_item()Nie można utworzyć/usunąć wpisu dla podanej sesjiZmienianie hasła STRESS dla %s.Zmienianie hasła dla %s.Błąd rozmowyRozmowa oczekuje na zdarzenieTworzenie katalogu "%s".Błąd krytyczny - natychmiastowe przerwanieDomyślny kontekst bezpieczeństwa %s Proszę podać nowe hasło STRESS: Proszę podać nowe hasło UNIX: Błąd w module usługiWstępne sprawdzenie hasła przez usługę się nie powiodłoWczytanie modułu się nie powiodłoUstawienie uwierzytelniania użytkownika nie powiodło sięWykorzystano maksymalną liczbę prób dla usługiNiewystarczające uwierzytelnienie do dostępu do danych uwierzytelniającychKontekst tworzenia klucza %s został przypisanyOstatnie nieudane logowanie:%s%s%sOstatnie logowanie:%s%s%sLogin Niepowodzenia Ostatnie niepowodzenie Z Błąd buforowania pamięciModuł jest nieznanyNie można zmienić hasła NIS.Nowe hasło %s%s: Brak domyślnego typu dla roli %s Brak wiadomości.Brak danych specyficznych dla modułuNie podano hasłaNieprawidłowy kontekst bezpieczeństwaPrzerwano zmianę hasła.Hasło było już używane.Hasło było już używane. Proszę wybrać inne.Hasło nie zostało zmienioneHasło: Brak dostępuProszę ponownie podać %sProszę ponownie podać nowe hasło %s%s: Proszę ponownie podać hasło STRESS: Proszę ponownie podać hasło UNIX: Kontekst bezpieczeństwa %s został przypisanyBłąd usługiPodane hasła się nie zgadzają.PowodzenieNie odnaleziono symboluBłąd systemuZwrócona wartość powinna zostać zignorowana przez PAMNastąpiła %d nieudana próba zalogowania od ostatniego udanego logowania.Nastąpiły %d nieudane próby zalogowania od ostatniego udanego logowania.Nastąpiło %d nieudanych prób zalogowania od ostatniego udanego logowania.Nastąpiło %d nieudanych prób zalogowania od ostatniego udanego logowania.Za dużo prób zalogowania na "%s".Nie można utworzyć i zainicjować katalogu "%s".Nie można uzyskać prawidłowego kontekstu dla %sNieznany błąd PAMNieznany błądNieznany użytkownikKonto użytkownika wygasłoUwierzytelnienie użytkownika wygasłoUżytkownik nieznany w module uwierzytelniania niższego poziomuSprawdzenie się nie powiodło; hasło nie zostało zmienioneOstrzeżenie: hasło wygaśnie za %d dzieńOstrzeżenie: hasło wygaśnie za %d dniOstrzeżenie: hasło wygaśnie za %d dniOstrzeżenie: hasło wygaśnie za %d dniWitaj na swoim nowym koncie!Wprowadzić inną rolę lub poziom?Wymagana jest natychmiastowa zmiana hasła (hasło wygasło)Wymagana jest natychmiastowa zmiana hasła (wymuszone przez roota)Wiadomości w folderze %s.Odebrano wiadomości.Nowe wiadomości w folderze %s.Odebrano nowe wiadomości.Brak wiadomości w folderze %s.Stare wiadomości w folderze %s.Skrzynka zawiera stare wiadomości.Należy wybrać dłuższe hasłoNależy poczekać dłużej, aby zmienić hasłoKonto wygasło; proszę skontaktować się z administratorem systemuma zmienioną tylko wielkość znakówzawiera nazwę użytkownika w pewnej formiezawiera za dużo takich samych znaków po sobiezawiera za dużo takich samych znaków po sobiebłędna rozmowa (%d) zainicjowanie PAM się nie powiodło pam_set_item() się nie powiodło jest palindromemjest obróconejest identyczne ze starymjest za bardzo podobne do poprzedniegojest za prostepoziom:login:login: rozdzielenie się nie powiodło: %mbłąd przydziału pamięciza mało klas znakówrola:Linux-PAM-1.1.8/po/bn_IN.gmo0000644000000000000000000004322712216527620012244 00000000000000y8 9 R ] f   ! &  G uh    1/ &a + &   . :6 7q #  9 $'Ck|5  ! B [|, *4K6 15I"[~" /%U hs   +3 D2QD Q/k"  6*TZ-2%DXD -@_!,B$#6/Z  /=DKf~C\o>E8 WB*2G]u:5V3sl~q D (5!}^!!"<#[#$E$g$0X%J%%_&X&a?''SL(t(')A=)O);) *9**e++W,7-*G-r-N-M.bm./.^/&_/e/N/P;0}0 1K1 2<+2%h2R2T2R63=3D3M 4 Z4/d4D4i4OC56H;7m7N7BA8"818v8P99z:;~<E<R<1==Q>>N?2h?X?d?2Y@@y-AAkBwCCUD4lD/DD"D.EJCEEEE7EBE[4FFO'J%[(v:+D;Xy`1\uWwxb"sG.qU EZp*F&jhA6k8 )Co?/39gH=^#,i5dt ]!RcT7r2Nle4 Lf-BP aS>m_0IMn$@KVQ Y< %a %b %e %H:%M:%S %Z %Y from %.*s on %.*s%s failed: caught signal %d%s%s failed: exit code %d%s failed: unknown status 0x%x%s: Bad number given to --reset= %s: Can't reset all users to non-zero %s: Unrecognised option %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (current) UNIX password: ...Sorry, your time is up! ...Time is running out... Access granted (last access was %ld seconds ago).Account locked due to %u failed loginsAccount temporary locked (%ld seconds left)Application needs to call libpam againAuthentication errorAuthentication failureAuthentication information cannot be recoveredAuthentication service cannot retrieve authentication infoAuthentication service cannot retrieve user credentialsAuthentication token aging disabledAuthentication token expiredAuthentication token is no longer valid; new one requiredAuthentication token lock busyAuthentication token manipulation errorBAD PASSWORD: %sBad item passed to pam_*_item()Cannot make/remove an entry for the specified sessionChanging STRESS password for %s.Changing password for %s.Conversation errorConversation is waiting for eventCreating directory '%s'.Critical error - immediate abortDefault Security Context %s Enter new STRESS password: Enter new UNIX password: Error in service moduleFailed preliminary check by password serviceFailed to load moduleFailure setting user credentialsHave exhausted maximum number of retries for serviceInsufficient credentials to access authentication dataKey Creation Context %s AssignedLast failed login:%s%s%sLast login:%s%s%sLogin Failures Latest failure From Memory buffer errorModule is unknownNIS password could not be changed.New %s%spassword: No default type for role %s No mail.No module specific data is presentNo password suppliedNot a valid security contextPassword change aborted.Password has been already used. Choose another.Password unchangedPassword: Permission deniedRetype %sRetype new %s%spassword: Retype new STRESS password: Retype new UNIX password: Security Context %s AssignedService errorSorry, passwords do not match.SuccessSymbol not foundSystem errorThe return value should be ignored by PAM dispatchThere was %d failed login attempt since the last successful login.There were %d failed login attempts since the last successful login.There were %d failed login attempts since the last successful login.Too many logins for '%s'.Unable to create and initialize directory '%s'.Unable to get valid context for %sUnknown PAM errorUnknown errorUnknown userUser account has expiredUser credentials expiredUser not known to the underlying authentication moduleVerification mis-typed; password unchangedWarning: your password will expire in %d dayWarning: your password will expire in %d daysWarning: your password will expire in %d daysWelcome to your new account!Would you like to enter a different role or level?You are required to change your password immediately (password aged)You are required to change your password immediately (root enforced)You have mail in folder %s.You have mail.You have new mail in folder %s.You have new mail.You have no mail in folder %s.You have old mail in folder %s.You have old mail.You must choose a longer passwordYou must wait longer to change your passwordYour account has expired; please contact your system administratorcase changes onlycontains the user name in some formcontains too many same characters consecutivelyerroneous conversation (%d) failed to initialize PAM failed to pam_set_item() is a palindromeis rotatedis the same as the old oneis too similar to the old oneis too simplelevel:login:login: failure forking: %mmemory allocation errornot enough character classesrole:Project-Id-Version: Linux-PAM Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam POT-Creation-Date: 2013-09-19 10:02+0200 PO-Revision-Date: 2012-02-28 10:38+0000 Last-Translator: runa Language-Team: Bengali (India) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bn_IN Plural-Forms: nplurals=2; plural=(n != 1) %a %b %e %H:%M:%S %Z %Y %.*s থেকে %.*s -র উপর%s বিফল: %d%s সিগনাল প্রাপ্ত%s বিফল: প্রস্থানকালীন কোড %d%s বিফল: অজানা অবস্থা 0x%x%s: --reset= এর জন্য ভুল সংখ্যা উল্লিখিত %s: সব ব্যবহারকারীর জন্য শূণ্য-ভিন্ন মান ধার্য করতে ব্যর্থ %s: অজানা বিকল্প %s %s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet] %s: [-f rooted-filename] [--file rooted-filename] [-u username] [--user username] [-r] [--reset[=n]] [--quiet] (বর্তমান) UNIX পাসওয়ার্ড: ...দুঃখিত, সময় সমাপ্ত! ...সময় সমাপ্তির পথে... প্রবেশাধিকার প্রদান করা হয়েছে (%ld পূর্বে সর্বশেষ লগ-ইন করা হয়েছে)।%u ব্যর্থ লগ-ইনের ফলে অ্যাকাউন্ট লক করা হয়েছেসাময়িকরূপে অ্যাকাউন্ট লক করা হয়েছে (%ld সেকেন্ড অবশিষ্ট)অ্যাপ্লিকেশন দ্বারা পুনরায় libpam আরম্ভ করা আবশ্যকঅনুমোদন সংক্রান্ত সমস্যাঅনুমোদন ব্যর্থঅনুমোদন সংক্রান্ত তথ্য পুনরুদ্ধার করতে ব্যর্থঅনুমোদন পরিসেবা দ্বারা অনুমোদন সংক্রান্ত তথ্য উদ্ধার করা সম্ভব হয়নিঅনুমোদন পরিসেবা দ্বারা প্রয়োজনীয় প্রমাণ উদ্ধার করা সম্ভব হয়নিঅনুমোদন টোকেনের মেয়াদ পূর্তী ব্যবস্থা নিষ্ক্রিয়অনুমোদন টোকেনের মেয়াদ পূর্ণ হয়েছেঅনুমোদনের টোকেন বৈধ নয়; নতুন টোকেন ব্যবহার করা আবশ্যকঅনুমোদন টোকেনের লক ব্যস্তঅনুমোদন টোকেন ব্যবস্থাপনা করতে সমস্যাপাসওয়ার্ড ভাল নয়: %spam_*_item()-এ সঠিক মান প্রেরিত হয়নিসুনির্দিষ্ট সেশানের জন্য কোনো এন্ট্রি নির্মাণ/অপসারণ করা সম্ভব নয়%s-র STRESS পাসওয়ার্ড পরিবর্তন করা হচ্ছে।%s-র পাসওয়ার্ড পরিবর্তন করা হচ্ছে।Conversation অর্থাৎ তথ্য বিনিময়কালীন সমস্যাConversation অর্থাৎ তথ্য বিনিময় প্রক্রিয়া একটি ইভেন্টের অপেক্ষায় রয়েছে'%s' ডিরেক্টরি নির্মাণ করা হচ্ছে।গুরুতব সমস্যা - এই মুহূর্তে পরিত্যাগ করা হবেডিফল্ট Security Context %s নতুন STRESS পাসওয়ার্ড লিখুন: নতুন UNIX পাসওয়ার্ড উল্লেখ করুন: পরিসেবা মডিউলে সমস্যাপাসওয়ার্ড পরিসেবা দ্বারা প্রারম্ভিক পরীক্ষা ব্যর্থমডিউল লোড করতে ব্যর্থব্যবহারকারীর পরিচয়প্রমাণের তথ্য নির্ধারণ করতে ব্যর্থপরিসেবায় উপলব্ধ সর্বাধিক প্রচেষ্টার সুযোগ সংখ্যা সমাপ্তঅনুমোদন সংক্রান্ত তথ্য প্রাপ্ত করার জন্য পর্যাপ্ত প্রমাণ উপলব্ধ নেইকি নির্মাণের Context %s ধার্য করা হয়েছেসর্বশেষ বিফল লগ-ইন:%s%s%sসর্বশেষ লগ-ইন:%s%s%sলগ-ইন বিফলতা সর্বশেষ বিফলতা চিহ্নিত স্থান থেকে মেমরি বাফার সংক্রান্ত সমস্যামডিউল অজানাNIS পাসওয়ার্ড পরিবর্তন করা সম্ভব হয়নি।নতুন %s%s পাসওয়ার্ড: role %s-র জন্য কোনো ডিফল্ট type উপস্থিত নেই কোনো মেইল নেই।মডিউল সংক্রান্ত কোনো তথ্য উপস্থিত নেইকোনো পাসওয়ার্ড উল্লিখিত হয়নিবৈধ নিরাপত্তা সংক্রান্ত context নয়পাসওয়ার্ড পরিবর্তনের কর্ম পরিত্যাগ করা হয়েছে।পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।পাসওয়ার্ড পরিবর্তন করা হয়নিপাসওয়ার্ড: অনুমতি প্রদান করা হয়নি%s পুনরায় লিখুননতুন %s%s পাসওয়ার্ড পুনরায় লিখুন: নতুন STRESS পাসওয়ার্ড পুনরায় লিখুন: নতুন UNIX পাসওয়ার্ড পুনরায় লিখুন: Security Context %s ধার্য করা হয়েছেপরিসেবা সংক্রান্ত সমস্যাদুঃখিত, পাসওয়ার্ড দুটি এক নয়।সফলচিহ্ন পাওয়া যায়নিসিস্টেম সংক্রান্ত সমস্যাউৎপন্ন মান PAM dispatch দ্বারা অগ্রাহ্য করা হবেসর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।সর্বশেষ সফল লগ-ইনের পরে %d-টি ব্যর্থ লগ-ইনের প্রচেষ্টা করা হয়েছে।'%s'-র ক্ষেত্রে অত্যাধিক লগ-ইনডিরেক্টরি '%s' নির্মাণ ও আরম্ভ করতে ব্যর্থ।%s-র বৈধ context প্রাপ্ত করতে ব্যর্থPAM সংক্রান্ত অজানা ত্রুটিঅজানা সমস্যাঅজানা ব্যবহারকারীব্যবহারকারী অ্যাকাউন্টের মেয়াদ পূর্ণ হয়েছেব্যবহারকারীর পরিচয়প্রমাণের তথ্যের মেয়াদ পূর্ণ হয়েছেপটভূমিতে চলমান অনুমোদন ব্যবস্থায় ব্যবহারকারী পরিচিত নন।নিশ্চায়ন কাল ভুল টাইপ করা হয়েছে; পাসওয়ার্ড পরিবর্তন করা হয়নিসতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবেসতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবেসতর্কবাণী: %d দিন পরে পাসওয়ার্ডের মেয়াদপূর্ণ হবেনতুন অ্যাকাউন্টে স্বাগতম!ভিন্ন role অথবা level লিখতে ইচ্ছুক কি?আপনার পাসওয়ার্ড এই মুহূর্তে পরিবর্তন করা আবশ্যক (password-র মেয়াদ পূর্ণ হয়েছে)আপনার পাসওয়ার্ড এই মুহূর্তে পরিবর্তন করা আবশ্যক (root দ্বারা কার্যকরী)%s ফোল্ডারে মেইল উপস্থিত রয়েছে।মেইল রয়েছে।%s ফোল্ডারে নতুন মেইল উপস্থিত।নতুন মেইল প্রাপ্ত।%s ফোল্ডারে কোনো মেইল উপস্থিত নেই।%s ফোল্ডারে পুরোনো মেইল উপস্থিত রয়েছে।পুরোনো মেইল রয়েছে।চিহ্নিত পাসওয়ার্ডের থেকে লম্বা পাসওয়ার্ড উল্লেখ করা আবশ্যককিছু কাল পরে পাসওয়ার্ড পরিবর্তন করা সম্ভব হবেআপনার অ্যাকাউন্টের মেয়াদপূর্ণ হয়েছে; অনুগ্রহ করে সিস্টেম অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।শুধুমাত্র হরফের ছাঁদ পরিবর্তন করা হয়েছেকোনো রূপে ব্যবহারকারী নাম অন্তর্ভুক্ত হয়েছেএকই অক্ষর অত্যাধিক বার ক্রমাগত ব্যবহার করা হয়েছেত্রুটিপূর্ণ তথ্যবিনিময় (conversation) (%d) PAM আরম্ভ করতে ব্যর্থ pam_set_item() করতে ব্যর্থ উভমুখী শব্দঘোরানো হয়েছেপুরোনোটির অনুরূপপুরোনো পাসওয়ার্ডের সমতূল্যজটিল নয়level: লগ-ইন:লগ-ইন: fork করতে ব্যর্থ: %mমেমরি বরাদ্দ করতে সমস্যাপর্যাপ্ত অক্ষর শ্রেণী উপস্থিত নেইrole: Linux-PAM-1.1.8/Make.xml.rules0000644000000000000000000000215012160065211012642 00000000000000# # Copyright (c) 2006 Thorsten Kukuk # README: README.xml $(XSLTPROC) --path $(srcdir) --xinclude --stringparam generate.toc "none" --nonet http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $(srcdir)/$@ %.1: %.1.xml $(XMLLINT) --nonet --xinclude --postvalid --noout $< $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude --nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< %.3: %.3.xml $(XMLLINT) --nonet --xinclude --postvalid --noout $< $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude --nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< %.5: %.5.xml $(XMLLINT) --nonet --xinclude --postvalid --noout $< $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude --nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< %.8: %.8.xml $(XMLLINT) --nonet --xinclude --postvalid --noout $< $(XSLTPROC) -o $(srcdir)/$@ --path $(srcdir) --xinclude --nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< #CLEANFILES += $(man_MANS) README Linux-PAM-1.1.8/configure0000755000000000000000000214661412216527534012056 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 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 # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (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 # 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 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="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_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { 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_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi 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'` # 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_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # 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; as_fn_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 } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac 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='mkdir -p "$as_dir"' 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 test -n "$DJDIR" || 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= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="conf/pam_conv1/pam_conv_y.y" # 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_default_prefix=/usr ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS HAVE_KEY_MANAGEMENT_FALSE HAVE_KEY_MANAGEMENT_TRUE HAVE_KEY_MANAGEMENT POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT USE_NLS ENABLE_GENERATE_PDF_FALSE ENABLE_GENERATE_PDF_TRUE ENABLE_REGENERATE_MAN_FALSE ENABLE_REGENERATE_MAN_TRUE FO2PDF BROWSER XMLCATALOG XML_CATALOG_FILE XMLLINT XSLTPROC HAVE_UNSHARE_FALSE HAVE_UNSHARE_TRUE LIBOBJS HAVE_LIBSELINUX_FALSE HAVE_LIBSELINUX_TRUE LIBSELINUX NIS_LIBS NIS_CFLAGS libtirpc_LIBS libtirpc_CFLAGS PKG_CONFIG HAVE_LIBDB_FALSE HAVE_LIBDB_TRUE LIBDB LIBCRYPT HAVE_AUDIT_TTY_STATUS_FALSE HAVE_AUDIT_TTY_STATUS_TRUE LIBAUDIT HAVE_LIBCRACK_FALSE HAVE_LIBCRACK_TRUE LIBCRACK LIBDL pam_xauth_path SCONFIGDIR SECUREDIR LIBPRELUDE_CONFIG_PREFIX LIBPRELUDE_PREFIX LIBPRELUDE_LIBS LIBPRELUDE_LDFLAGS LIBPRELUDE_PTHREAD_CFLAGS LIBPRELUDE_CFLAGS LIBPRELUDE_CONFIG PIE_LDFLAGS PIE_CFLAGS libc_cv_fpie HAVE_VERSIONING_FALSE HAVE_VERSIONING_TRUE BUILD_LDFLAGS BUILD_CFLAGS CC_FOR_BUILD pam_cv_ld_O1 pam_cv_ld_no_undefined pam_cv_ld_as_needed LEXLIB LEX_OUTPUT_ROOT LEX YFLAGS YACC STATIC_MODULES_FALSE STATIC_MODULES_TRUE CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED 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 LIBTOOL 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_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_static enable_shared with_pic enable_fast_install enable_dependency_tracking with_gnu_ld enable_libtool_lock enable_static_modules enable_largefile enable_pie enable_prelude with_libprelude_prefix enable_debug enable_securedir enable_isadir enable_sconfigdir enable_pamlocking enable_read_both_confs enable_lckpwdf with_mailspool with_xauth enable_cracklib enable_audit with_randomdev enable_db with_db_uniquename enable_nis enable_selinux enable_regenerate_docu with_xml_catalog 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 YACC YFLAGS PKG_CONFIG libtirpc_CFLAGS libtirpc_LIBS' # 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_fn_error "invalid feature name: $ac_useropt" 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_fn_error "invalid feature name: $ac_useropt" 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_fn_error "invalid package name: $ac_useropt" 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_fn_error "invalid package name: $ac_useropt" 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_fn_error "unrecognized option: \`$ac_option' Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error "invalid variable name: \`$ac_envvar'" ;; esac 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_fn_error "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; *) $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_fn_error "expected an absolute directory name for --$ac_var: $ac_val" 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_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error "pwd does not report name of working directory" # 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_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" 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] --enable-static[=PKGS] build static libraries [default=no] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-libtool-lock avoid locking (might break parallel builds) --enable-static-modules do not make the modules dynamically loadable --disable-largefile omit support for large files --disable-pie disable position-independent executeables (PIE) --disable-prelude do not use prelude --enable-debug specify you are building with debugging on --enable-securedir=DIR path to location of PAMs [default=$libdir/security] --enable-isadir=DIR path to arch-specific module files [default=../../(basename of $libdir)/security] --enable-sconfigdir=DIR path to module conf files [default=$sysconfdir/security] --enable-pamlocking configure libpam to observe a global authentication lock --enable-read-both-confs read both /etc/pam.d and /etc/pam.conf files --disable-lckpwdf do not use the lckpwdf function --disable-cracklib do not use cracklib --disable-audit do not enable audit support --enable-db=(db|ndbm|yes|no) Default behavior 'yes', which is to check for libdb first, followed by ndbm. Use 'no' to disable db support. --disable-nis Disable building NIS/YP support in pam_unix and pam_access --disable-selinux do not use SELinux --disable-regenerate-docu Don't re-build documentation from XML sources --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-libprelude-prefix=PFX Prefix where libprelude is installed (optional) --with-mailspool path to mail spool directory default _PATH_MAILDIR if defined in paths.h, otherwise /var/spool/mail --with-xauth additional path to check for xauth when it is called from pam_xauth added to the default of /usr/X11R6/bin/xauth, /usr/bin/xauth, /usr/bin/X11/xauth --with-randomdev=(|yes|no) use specified random device instead of /dev/urandom or 'no' to disable --with-db-uniquename=extension Unique name for db libraries and functions. --with-xml-catalog=CATALOG path to xml catalog to use --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 (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor YACC The `Yet Another C Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. PKG_CONFIG path to pkg-config utility libtirpc_CFLAGS C compiler flags for libtirpc, overriding pkg-config libtirpc_LIBS linker flags for libtirpc, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _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.65 Copyright (C) 2009 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 ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { 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_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 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 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* 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 $2 (); /* 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_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" 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 eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_type # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" 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 eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_member # ac_fn_c_check_decl LINENO SYMBOL VAR # ------------------------------------ # Tests whether SYMBOL is declared, setting cache variable VAR accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 $as_echo_n "checking whether $2 is declared... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $2 (void) $2; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_decl 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.65. 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) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append 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 as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset 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:${as_lineno-$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= ;; #( *) { eval $ac_var=; 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'; as_fn_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 $as_echo "/* confdefs.h */" > 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 cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _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 /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$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. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$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. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$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_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## 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 ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do for ac_t in install-sh install.sh shtool; do if test -f "$ac_dir/$ac_t"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/$ac_t -c" break 2 fi done done if test -z "$ac_aux_dir"; then as_fn_error "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 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. am__api_version='1.11' # 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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 # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # 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_fn_error "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$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` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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" { $as_echo "$as_me:${as_lineno-$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 test -d ./--version && rmdir ./--version 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. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$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_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 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="Linux-PAM" VERSION=1.1.8 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"} # 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 -' case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$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" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$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_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error "invalid value of canonical build" "$LINENO" 5;; 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:${as_lineno-$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_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error "invalid value of canonical host" "$LINENO" 5;; 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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$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 # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$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 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "no acceptable C compiler found in \$PATH See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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 if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "C compiler cannot create executables See \`config.log' for more details." "$LINENO" 5; }; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of object files: cannot compile See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else 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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes 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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg 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:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : 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 depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$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 am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac 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 # 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. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; 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 ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj 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 $am__obj 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:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$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 { ac_script=; unset 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 as_fn_arith $ac_count + 1 && ac_count=$as_val 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_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 as_fn_arith $ac_count + 1 && ac_count=$as_val 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_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$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 as_fn_arith $ac_count + 1 && ac_count=$as_val 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_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$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 as_fn_arith $ac_count + 1 && ac_count=$as_val 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_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:4770: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:4773: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:4776: 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:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$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:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$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\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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 5982 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ 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:${as_lineno-$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\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$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 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # 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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." "$LINENO" 5; } 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h 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` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " eval as_val=\$$as_ac_Header 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 dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options # 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 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 --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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:7511: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7515: \$? = $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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:7850: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7854: \$? = $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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:7955: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:7959: \$? = $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:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$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:8010: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8014: \$? = $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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; 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 fi rm -f core conftest.err conftest.$ac_objext \ 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; 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 fi rm -f core conftest.err conftest.$ac_objext \ 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void) {} _ACEOF if ac_fn_c_try_link "$LINENO"; 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' fi rm -f core conftest.err conftest.$ac_objext \ 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:${as_lineno-$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:${as_lineno-$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\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 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\":${as_lineno-$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:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 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:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$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 ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$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 ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 10377 "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\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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:${as_lineno-$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:${as_lineno-$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 10473 "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\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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: ac_config_headers="$ac_config_headers config.h" test "${prefix}" = "NONE" && prefix="/usr" if test ${prefix} = '/usr' then if test ${sysconfdir} = '${prefix}/etc' then sysconfdir="/etc" fi if test ${libdir} = '${exec_prefix}/lib' then case "`uname -m`" in x86_64|ppc64|s390x|sparc64) libdir="/lib64" ;; *) libdir="/lib" ;; esac fi if test ${sbindir} = '${exec_prefix}/sbin' then sbindir="/sbin" fi if test ${mandir} = '${prefix}/man' then mandir='${prefix}/share/man' fi if test ${includedir} = '${prefix}/include' then includedir="${prefix}/include/security" fi if test ${localstatedir} = '${prefix}/var' then localstatedir="/var" fi fi # Check whether --enable-static-modules was given. if test "${enable_static_modules+set}" = set; then : enableval=$enable_static_modules; STATIC_MODULES=$enableval else STATIC_MODULES=no fi if test "$STATIC_MODULES" != "no" ; then CFLAGS="$CFLAGS -DPAM_STATIC" # 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 --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=no fi else # per default don't build static libraries # 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 fi if test "$STATIC_MODULES" != "no"; then STATIC_MODULES_TRUE= STATIC_MODULES_FALSE='#' else STATIC_MODULES_TRUE='#' STATIC_MODULES_FALSE= fi ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = x""yes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$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 && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "no acceptable C compiler found in \$PATH See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else 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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes 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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg 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:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : 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 depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$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 am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac 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 # 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. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; 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 ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj 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 $am__obj 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:${as_lineno-$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 for ac_prog in 'bison -y' byacc 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_YACC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # 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_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" for ac_prog in flex lex 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LEX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # 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_LEX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { yyless (input () != 0); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if test "${ac_cv_prog_lex_root+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if test "${ac_cv_lib_lex+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports --as-needed" >&5 $as_echo_n "checking whether ld supports --as-needed... " >&6; } if test "${pam_cv_ld_as_needed+set}" = set; then : $as_echo_n "(cached) " >&6 else cat > conftest.c <&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then pam_cv_ld_as_needed=yes LDFLAGS="$LDFLAGS -Wl,--as-needed" else pam_cv_ld_as_needed=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_cv_ld_as_needed" >&5 $as_echo "$pam_cv_ld_as_needed" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports --no-undefined" >&5 $as_echo_n "checking whether ld supports --no-undefined... " >&6; } if test "${pam_cv_ld_no_undefined+set}" = set; then : $as_echo_n "(cached) " >&6 else cat > conftest.c <&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then pam_cv_ld_no_undefined=yes LDFLAGS="$LDFLAGS -Wl,--no-undefined" else pam_cv_ld_no_undefined=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_cv_ld_no_undefined" >&5 $as_echo "$pam_cv_ld_no_undefined" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports -O1" >&5 $as_echo_n "checking whether ld supports -O1... " >&6; } if test "${pam_cv_ld_O1+set}" = set; then : $as_echo_n "(cached) " >&6 else cat > conftest.c <&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then pam_cv_ld_O1=yes LDFLAGS="$LDFLAGS -Wl,-O1" else pam_cv_ld_O1=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_cv_ld_O1" >&5 $as_echo "$pam_cv_ld_O1" >&6; } # 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break 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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break 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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break 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:${as_lineno-$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 if eval "test x$GCC = xyes -a $CC != icc"; then for flag in \ -W \ -Wall \ -Wbad-function-cast \ -Wcast-align \ -Wcast-qual \ -Wmissing-declarations \ -Wmissing-prototypes \ -Wpointer-arith \ -Wreturn-type \ -Wstrict-prototypes \ -Wwrite-strings \ -Winline \ -Wshadow do case "$CFLAGS" in "$flag" | "$flag "* | *" $flag" | *" $flag "* ) : ;; *) CFLAGS="$CFLAGS $flag" ;; esac done fi if eval "test x$CC = xicc"; then for flag in \ -Wall \ -Wmissing-prototypes \ -Wpointer-arith \ -Wreturn-type \ -Wstrict-prototypes \ -Wwrite-strings \ -Wshadow \ -Wp64 \ -Wdeprecated \ -Wuninitialized \ -Wmain do case "$CFLAGS" in "$flag" | "$flag "* | *" $flag" | *" $flag "* ) : ;; *) CFLAGS="$CFLAGS $flag" ;; esac done fi if test "x${CC_FOR_BUILD+set}" != "xset" ; then if test "x$cross_compiling" = "xyes" ; then for ac_prog in gcc cc 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC_FOR_BUILD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # 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_FOR_BUILD="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 $as_echo "$CC_FOR_BUILD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC_FOR_BUILD" && break done else CC_FOR_BUILD=${CC} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CC_FOR_BUILD" >&5 $as_echo_n "checking for CC_FOR_BUILD... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 $as_echo "$CC_FOR_BUILD" >&6; } if test "x${BUILD_CFLAGS+set}" != "xset" ; then if test "x$cross_compiling" = "xyes" ; then BUILD_CFLAGS= else BUILD_CFLAGS=${CFLAGS} fi fi if test "x${BUILD_LDFLAGS+set}" != "xset" ; then if test "x$cross_compiling" = "xyes" ; then BUILD_LDFLAGS= else BUILD_LDFLAGS=${LDFLAGS} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__" >&5 $as_echo_n "checking for __attribute__... " >&6; } if test "${ac_cv___attribute__+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include static void foo (void) __attribute__ ((unused)); static void foo (void) { exit(1); } int main () { exit (0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv___attribute__=yes else ac_cv___attribute__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "$ac_cv___attribute__" = "yes"; then $as_echo "#define UNUSED __attribute__ ((unused))" >>confdefs.h else $as_echo "#define UNUSED /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv___attribute__" >&5 $as_echo "$ac_cv___attribute__" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for .symver assembler directive" >&5 $as_echo_n "checking for .symver assembler directive... " >&6; } if test "${libc_cv_asm_symver_directive+set}" = set; then : $as_echo_n "(cached) " >&6 else cat > conftest.s <&5 2>&5; then libc_cv_asm_symver_directive=yes else libc_cv_asm_symver_directive=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_symver_directive" >&5 $as_echo "$libc_cv_asm_symver_directive" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld --version-script" >&5 $as_echo_n "checking for ld --version-script... " >&6; } if test "${libc_cv_ld_version_script_option+set}" = set; then : $as_echo_n "(cached) " >&6 else if test $libc_cv_asm_symver_directive = yes; then cat > conftest.s < conftest.map <&5 2>&5; then if { ac_try='${CC-cc} $CFLAGS $LDFLAGS -shared -o conftest.so conftest.o -nostartfiles -nostdlib -Wl,--version-script,conftest.map 1>&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then libc_cv_ld_version_script_option=yes else libc_cv_ld_version_script_option=no fi else libc_cv_ld_version_script_option=no fi else libc_cv_ld_version_script_option=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ld_version_script_option" >&5 $as_echo "$libc_cv_ld_version_script_option" >&6; } if test "$libc_cv_ld_version_script_option" = "yes"; then HAVE_VERSIONING_TRUE= HAVE_VERSIONING_FALSE='#' else HAVE_VERSIONING_TRUE='#' HAVE_VERSIONING_FALSE= fi # Check whether --enable-pie was given. if test "${enable_pie+set}" = set; then : enableval=$enable_pie; USE_PIE=$enableval else USE_PIE=yes fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } 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:${as_lineno-$LINENO}: result: $libc_cv_fpie" >&5 $as_echo "$libc_cv_fpie" >&6; } # Check whether --enable-prelude was given. if test "${enable_prelude+set}" = set; then : enableval=$enable_prelude; WITH_PRELUDE=$enableval else WITH_PRELUDE=yes fi if test "$WITH_PRELUDE" == "yes" ; then # Check whether --with-libprelude-prefix was given. if test "${with_libprelude_prefix+set}" = set; then : withval=$with_libprelude_prefix; libprelude_config_prefix="$withval" else libprelude_config_prefix="" fi if test x$libprelude_config_prefix != x ; then if test x${LIBPRELUDE_CONFIG+set} != xset ; then LIBPRELUDE_CONFIG=$libprelude_config_prefix/bin/libprelude-config fi fi # Extract the first word of "libprelude-config", so it can be a program name with args. set dummy libprelude-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_LIBPRELUDE_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $LIBPRELUDE_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_LIBPRELUDE_CONFIG="$LIBPRELUDE_CONFIG" # 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_LIBPRELUDE_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_LIBPRELUDE_CONFIG" && ac_cv_path_LIBPRELUDE_CONFIG="no" ;; esac fi LIBPRELUDE_CONFIG=$ac_cv_path_LIBPRELUDE_CONFIG if test -n "$LIBPRELUDE_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBPRELUDE_CONFIG" >&5 $as_echo "$LIBPRELUDE_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi min_libprelude_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libprelude - version >= $min_libprelude_version" >&5 $as_echo_n "checking for libprelude - version >= $min_libprelude_version... " >&6; } no_libprelude="" if test "$LIBPRELUDE_CONFIG" = "no" ; then no_libprelude=yes else LIBPRELUDE_CFLAGS=`$LIBPRELUDE_CONFIG $libprelude_config_args --cflags` LIBPRELUDE_PTHREAD_CFLAGS=`$LIBPRELUDE_CONFIG $libprelude_config_args --pthread-cflags` LIBPRELUDE_LDFLAGS=`$LIBPRELUDE_CONFIG $libprelude_config_args --ldflags` LIBPRELUDE_LIBS=`$LIBPRELUDE_CONFIG $libprelude_config_args --libs` LIBPRELUDE_PREFIX=`$LIBPRELUDE_CONFIG $libprelude_config_args --prefix` LIBPRELUDE_CONFIG_PREFIX=`$LIBPRELUDE_CONFIG $libprelude_config_args --config-prefix` libprelude_config_version=`$LIBPRELUDE_CONFIG $libprelude_config_args --version` ac_save_CFLAGS="$CFLAGS" ac_save_LDFLAGS="$LDFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $LIBPRELUDE_CFLAGS" LDFLAGS="$LDFLAGS $LIBPRELUDE_LDFLAGS" LIBS="$LIBS $LIBPRELUDE_LIBS" rm -f conf.libpreludetest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { system ("touch conf.libpreludetest"); if( strcmp( prelude_check_version(NULL), "$libprelude_config_version" ) ) { printf("\n*** 'libprelude-config --version' returned %s, but LIBPRELUDE (%s)\n", "$libprelude_config_version", prelude_check_version(NULL) ); printf("*** was found! If libprelude-config was correct, then it is best\n"); printf("*** to remove the old version of LIBPRELUDE. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If libprelude-config was wrong, set the environment variable LIBPRELUDE_CONFIG\n"); printf("*** to point to the correct copy of libprelude-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } else if ( strcmp(prelude_check_version(NULL), LIBPRELUDE_VERSION ) ) { printf("\n*** LIBPRELUDE header file (version %s) does not match\n", LIBPRELUDE_VERSION); printf("*** library (version %s)\n", prelude_check_version(NULL) ); } else { if ( prelude_check_version( "$min_libprelude_version" ) ) { return 0; } else { printf("no\n*** An old version of LIBPRELUDE (%s) was found.\n", prelude_check_version(NULL) ); printf("*** You need a version of LIBPRELUDE newer than %s. The latest version of\n", "$min_libprelude_version" ); printf("*** LIBPRELUDE is always available from http://www.prelude-ids.org/download/releases.\n"); printf("*** \n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the libprelude-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of LIBPRELUDE, but you can also set the LIBPRELUDE_CONFIG environment to point to the\n"); printf("*** correct copy of libprelude-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_libprelude=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" LDFLAGS="$ac_save_LDFLAGS" fi if test "x$no_libprelude" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : else if test -f conf.libpreludetest ; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$LIBPRELUDE_CONFIG" = "no" ; then echo "*** The libprelude-config script installed by LIBPRELUDE could not be found" echo "*** If LIBPRELUDE was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the LIBPRELUDE_CONFIG environment variable to the" echo "*** full path to libprelude-config." else if test -f conf.libpreludetest ; then : else echo "*** Could not run libprelude test program, checking why..." CFLAGS="$CFLAGS $LIBPRELUDE_CFLAGS" LDFLAGS="$LDFLAGS $LIBPRELUDE_LDFLAGS" LIBS="$LIBS $LIBPRELUDE_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { return !!prelude_check_version(NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding LIBPRELUDE or finding the wrong" echo "*** version of LIBPRELUDE. If it is not finding LIBPRELUDE, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means LIBPRELUDE was incorrectly installed" echo "*** or that you have moved LIBPRELUDE since it was installed. In the latter case, you" echo "*** may want to edit the libprelude-config script: $LIBPRELUDE_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LDFLAGS="$ac_save_LDFLAGS" LIBS="$ac_save_LIBS" fi fi LIBPRELUDE_CFLAGS="" LIBPRELUDE_LDFLAGS="" LIBPRELUDE_LIBS="" : fi rm -f conf.libpreludetest if test "$LIBPRELUDE_CONFIG" != "no" ; then LIBPRELUDE_CFLAGS="$LIBPRELUDE_CFLAGS -DPRELUDE=1" fi fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; fi if test x"$enable_debug" = x"yes" ; then $as_echo "#define PAM_DEBUG /**/" >>confdefs.h fi # Check whether --enable-securedir was given. if test "${enable_securedir+set}" = set; then : enableval=$enable_securedir; SECUREDIR=$enableval else SECUREDIR=$libdir/security fi # Check whether --enable-isadir was given. if test "${enable_isadir+set}" = set; then : enableval=$enable_isadir; ISA=$enableval else ISA=../../`basename $libdir`/security fi unset mylibdirbase cat >>confdefs.h <<_ACEOF #define _PAM_ISA "$ISA" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: Defining \$ISA to \"$ISA\"" >&5 $as_echo "Defining \$ISA to \"$ISA\"" >&6; } # Check whether --enable-sconfigdir was given. if test "${enable_sconfigdir+set}" = set; then : enableval=$enable_sconfigdir; SCONFIGDIR=$enableval else SCONFIGDIR=$sysconfdir/security fi # Check whether --enable-pamlocking was given. if test "${enable_pamlocking+set}" = set; then : enableval=$enable_pamlocking; fi if test x"$enable_pamlocking" = "xyes"; then $as_echo "#define PAM_LOCKING /**/" >>confdefs.h fi # Check whether --enable-read-both-confs was given. if test "${enable_read_both_confs+set}" = set; then : enableval=$enable_read_both_confs; fi if test x"$enable_read_both_confs" = "xyes"; then $as_echo "#define PAM_READ_BOTH_CONFS /**/" >>confdefs.h fi # Check whether --enable-lckpwdf was given. if test "${enable_lckpwdf+set}" = set; then : enableval=$enable_lckpwdf; WITH_LCKPWDF=$enableval else WITH_LCKPWDF=yes fi if test "$WITH_LCKPWDF" == "yes" ; then $as_echo "#define USE_LCKPWDF 1" >>confdefs.h fi for ac_header in paths.h do : ac_fn_c_check_header_mongrel "$LINENO" "paths.h" "ac_cv_header_paths_h" "$ac_includes_default" if test "x$ac_cv_header_paths_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PATHS_H 1 _ACEOF fi done # Check whether --with-mailspool was given. if test "${with_mailspool+set}" = set; then : withval=$with_mailspool; with_mailspool=${withval} fi if test x$with_mailspool != x ; then pam_mail_spool="\"$with_mailspool\"" else if test "$cross_compiling" = yes; then : pam_mail_spool="\"/var/spool/mail\"" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main() { #ifdef _PATH_MAILDIR exit(0); #else exit(1); #endif } _ACEOF if ac_fn_c_try_run "$LINENO"; then : pam_mail_spool="_PATH_MAILDIR" else pam_mail_spool="\"/var/spool/mail\"" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi cat >>confdefs.h <<_ACEOF #define PAM_PATH_MAILDIR $pam_mail_spool _ACEOF # Check whether --with-xauth was given. if test "${with_xauth+set}" = set; then : withval=$with_xauth; pam_xauth_path=${withval} fi if test x$with_xauth == x ; then # Extract the first word of "xauth", so it can be a program name with args. set dummy xauth; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_pam_xauth_path+set}" = set; then : $as_echo_n "(cached) " >&6 else case $pam_xauth_path in [\\/]* | ?:[\\/]*) ac_cv_path_pam_xauth_path="$pam_xauth_path" # 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_pam_xauth_path="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi pam_xauth_path=$ac_cv_path_pam_xauth_path if test -n "$pam_xauth_path"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pam_xauth_path" >&5 $as_echo "$pam_xauth_path" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$pam_xauth_path == x/usr/X11R6/bin/xauth ; then unset pam_xauth_path fi fi if test x$pam_xauth_path != x ; then cat >>confdefs.h <<_ACEOF #define PAM_PATH_XAUTH "$pam_xauth_path" _ACEOF fi { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$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 : LIBDL="-ldl" else LIBDL="" fi # Check for cracklib # Check whether --enable-cracklib was given. if test "${enable_cracklib+set}" = set; then : enableval=$enable_cracklib; WITH_CRACKLIB=$enableval else WITH_CRACKLIB=yes fi if test x"$WITH_CRACKLIB" != xno ; then for ac_header in crack.h do : ac_fn_c_check_header_mongrel "$LINENO" "crack.h" "ac_cv_header_crack_h" "$ac_includes_default" if test "x$ac_cv_header_crack_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_CRACK_H 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FascistCheck in -lcrack" >&5 $as_echo_n "checking for FascistCheck in -lcrack... " >&6; } if test "${ac_cv_lib_crack_FascistCheck+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrack $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 FascistCheck (); int main () { return FascistCheck (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crack_FascistCheck=yes else ac_cv_lib_crack_FascistCheck=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crack_FascistCheck" >&5 $as_echo "$ac_cv_lib_crack_FascistCheck" >&6; } if test "x$ac_cv_lib_crack_FascistCheck" = x""yes; then : LIBCRACK="-lcrack" else LIBCRACK="" fi fi done else LIBCRACK="" fi if test -n "$LIBCRACK"; then $as_echo "#define HAVE_LIBCRACK 1" >>confdefs.h fi if test -n "$LIBCRACK"; then HAVE_LIBCRACK_TRUE= HAVE_LIBCRACK_FALSE='#' else HAVE_LIBCRACK_TRUE='#' HAVE_LIBCRACK_FALSE= fi # Check whether --enable-audit was given. if test "${enable_audit+set}" = set; then : enableval=$enable_audit; WITH_LIBAUDIT=$enableval else WITH_LIBAUDIT=yes fi if test x"$WITH_LIBAUDIT" != xno ; then ac_fn_c_check_header_mongrel "$LINENO" "libaudit.h" "ac_cv_header_libaudit_h" "$ac_includes_default" if test "x$ac_cv_header_libaudit_h" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for audit_log_acct_message in -laudit" >&5 $as_echo_n "checking for audit_log_acct_message in -laudit... " >&6; } if test "${ac_cv_lib_audit_audit_log_acct_message+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-laudit $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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_log_acct_message (); int main () { return audit_log_acct_message (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_audit_audit_log_acct_message=yes else ac_cv_lib_audit_audit_log_acct_message=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_audit_audit_log_acct_message" >&5 $as_echo "$ac_cv_lib_audit_audit_log_acct_message" >&6; } if test "x$ac_cv_lib_audit_audit_log_acct_message" = x""yes; then : LIBAUDIT=-laudit else LIBAUDIT="" fi ac_fn_c_check_type "$LINENO" "struct audit_tty_status" "ac_cv_type_struct_audit_tty_status" "#include " if test "x$ac_cv_type_struct_audit_tty_status" = x""yes; then : HAVE_AUDIT_TTY_STATUS=yes else HAVE_AUDIT_TTY_STATUS="" fi fi if test ! -z "$LIBAUDIT" -a "$ac_cv_header_libaudit_h" != "no" ; then $as_echo "#define HAVE_LIBAUDIT 1" >>confdefs.h fi if test ! -z "$HAVE_AUDIT_TTY_STATUS" ; then $as_echo "#define HAVE_AUDIT_TTY_STATUS 1" >>confdefs.h ac_fn_c_check_member "$LINENO" "struct audit_tty_status" "log_passwd" "ac_cv_member_struct_audit_tty_status_log_passwd" "#include " if test "x$ac_cv_member_struct_audit_tty_status_log_passwd" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: audit_tty_status.log_passwd is not available. The log_passwd option is disabled." >&5 $as_echo "$as_me: WARNING: audit_tty_status.log_passwd is not available. The log_passwd option is disabled." >&2;} fi fi else LIBAUDIT="" fi if test "x$HAVE_AUDIT_TTY_STATUS" = xyes; then HAVE_AUDIT_TTY_STATUS_TRUE= HAVE_AUDIT_TTY_STATUS_FALSE='#' else HAVE_AUDIT_TTY_STATUS_TRUE='#' HAVE_AUDIT_TTY_STATUS_FALSE= fi for ac_header in xcrypt.h crypt.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header 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 "x$ac_cv_header_xcrypt_h" = "xyes"; then : crypt_libs="xcrypt crypt" else crypt_libs="crypt" fi BACKUP_LIBS=$LIBS { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 '' $crypt_libs; 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_crypt=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ 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:${as_lineno-$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" LIBCRYPT="-l$ac_lib" else LIBCRYPT="" fi for ac_func in crypt_r crypt_gensalt_r do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var 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 if test "$LIBCRYPT" = "-lxcrypt" -a "$ac_cv_header_xcrypt_h" = "yes" ; then $as_echo "#define HAVE_LIBXCRYPT 1" >>confdefs.h fi # Check whether --with-randomdev was given. if test "${with_randomdev+set}" = set; then : withval=$with_randomdev; opt_randomdev=$withval fi if test "$opt_randomdev" = yes -o -z "$opt_randomdev"; then opt_randomdev="/dev/urandom" elif test "$opt_randomdev" = no; then opt_randomdev= fi if test -n "$opt_randomdev"; then cat >>confdefs.h <<_ACEOF #define PAM_PATH_RANDOMDEV "$opt_randomdev" _ACEOF fi # Check whether --enable-db was given. if test "${enable_db+set}" = set; then : enableval=$enable_db; WITH_DB=$enableval else WITH_DB=yes fi # Check whether --with-db-uniquename was given. if test "${with_db_uniquename+set}" = set; then : withval=$with_db_uniquename; fi if test x"$WITH_DB" != xno ; then if test x"$WITH_DB" = xyes -o x"$WITH_DB" = xdb ; then old_libs=$LIBS LIBS="$LIBS -ldb$with_db_uniquename" for ac_func in db_create$with_db_uniquename db_create dbm_store$with_db_uniquename dbm_store do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF LIBDB="-ldb$with_db_uniquename"; break fi done LIBS=$old_libs fi if test -z "$LIBDB" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbm_store in -lndbm" >&5 $as_echo_n "checking for dbm_store in -lndbm... " >&6; } if test "${ac_cv_lib_ndbm_dbm_store+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lndbm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 dbm_store (); int main () { return dbm_store (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ndbm_dbm_store=yes else ac_cv_lib_ndbm_dbm_store=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ndbm_dbm_store" >&5 $as_echo "$ac_cv_lib_ndbm_dbm_store" >&6; } if test "x$ac_cv_lib_ndbm_dbm_store" = x""yes; then : LIBDB="-lndbm" else LIBDB="" fi if test ! -z "$LIBDB" ; then for ac_header in ndbm.h do : ac_fn_c_check_header_mongrel "$LINENO" "ndbm.h" "ac_cv_header_ndbm_h" "$ac_includes_default" if test "x$ac_cv_header_ndbm_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NDBM_H 1 _ACEOF fi done fi else for ac_header in db.h do : ac_fn_c_check_header_mongrel "$LINENO" "db.h" "ac_cv_header_db_h" "$ac_includes_default" if test "x$ac_cv_header_db_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DB_H 1 _ACEOF fi done fi fi if test ! -z "$LIBDB"; then HAVE_LIBDB_TRUE= HAVE_LIBDB_FALSE='#' else HAVE_LIBDB_TRUE='#' HAVE_LIBDB_FALSE= fi # Check whether --enable-nis was given. if test "${enable_nis+set}" = set; then : enableval=$enable_nis; fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # 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_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # 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_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi if test "x$enable_nis" != "xno"; then : CFLAGS=$old_CFLAGS LIBS=$old_LIBS pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libtirpc" >&5 $as_echo_n "checking for libtirpc... " >&6; } if test -n "$libtirpc_CFLAGS"; then pkg_cv_libtirpc_CFLAGS="$libtirpc_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtirpc\""; } >&5 ($PKG_CONFIG --exists --print-errors "libtirpc") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libtirpc_CFLAGS=`$PKG_CONFIG --cflags "libtirpc" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libtirpc_LIBS"; then pkg_cv_libtirpc_LIBS="$libtirpc_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtirpc\""; } >&5 ($PKG_CONFIG --exists --print-errors "libtirpc") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libtirpc_LIBS=`$PKG_CONFIG --libs "libtirpc" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libtirpc_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libtirpc" 2>&1` else libtirpc_PKG_ERRORS=`$PKG_CONFIG --print-errors "libtirpc" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libtirpc_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } :; elif test $pkg_failed = untried; then :; else libtirpc_CFLAGS=$pkg_cv_libtirpc_CFLAGS libtirpc_LIBS=$pkg_cv_libtirpc_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } CFLAGS="$CFLAGS $libtirpc_CFLAGS" LIBS="$LIBS $libtirpc_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing yp_get_default_domain" >&5 $as_echo_n "checking for library containing yp_get_default_domain... " >&6; } if test "${ac_cv_search_yp_get_default_domain+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 for ac_lib in '' nsl; 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_yp_get_default_domain=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_yp_get_default_domain+set}" = set; then : break fi done if test "${ac_cv_search_yp_get_default_domain+set}" = set; then : else ac_cv_search_yp_get_default_domain=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_yp_get_default_domain" >&5 $as_echo "$ac_cv_search_yp_get_default_domain" >&6; } ac_res=$ac_cv_search_yp_get_default_domain if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi for ac_func in yp_get_default_domain yperr_string yp_master yp_bind yp_match yp_unbind do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var 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_header in rpc/rpc.h rpcsvc/ypclnt.h rpcsvc/yp_prot.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header 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 ac_fn_c_check_decl "$LINENO" "getrpcport" "ac_cv_have_decl_getrpcport" " #if HAVE_RPC_RPC_H # include #endif " if test "x$ac_cv_have_decl_getrpcport" = x""yes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETRPCPORT $ac_have_decl _ACEOF NIS_CFLAGS="${CFLAGS%${old_CFLAGS}}" NIS_LIBS="${LIBS%${old_LIBS}}" CFLAGS="$old_CFLAGS" LIBS="$old_LIBS" fi # Check whether --enable-selinux was given. if test "${enable_selinux+set}" = set; then : enableval=$enable_selinux; WITH_SELINUX=$enableval else WITH_SELINUX=yes fi if test "$WITH_SELINUX" == "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getfilecon in -lselinux" >&5 $as_echo_n "checking for getfilecon in -lselinux... " >&6; } if test "${ac_cv_lib_selinux_getfilecon+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lselinux $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 getfilecon (); int main () { return getfilecon (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_selinux_getfilecon=yes else ac_cv_lib_selinux_getfilecon=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_getfilecon" >&5 $as_echo "$ac_cv_lib_selinux_getfilecon" >&6; } if test "x$ac_cv_lib_selinux_getfilecon" = x""yes; then : LIBSELINUX="-lselinux" else LIBSELINUX="" fi else LIBSELINUX="" fi if test ! -z "$LIBSELINUX"; then HAVE_LIBSELINUX_TRUE= HAVE_LIBSELINUX_FALSE='#' else HAVE_LIBSELINUX_TRUE='#' HAVE_LIBSELINUX_FALSE= fi if test ! -z "$LIBSELINUX" ; then $as_echo "#define WITH_SELINUX 1" >>confdefs.h BACKUP_LIBS=$LIBS LIBS="$LIBS $LIBSELINUX" for ac_func in setkeycreatecon do : ac_fn_c_check_func "$LINENO" "setkeycreatecon" "ac_cv_func_setkeycreatecon" if test "x$ac_cv_func_setkeycreatecon" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETKEYCREATECON 1 _ACEOF fi done for ac_func in getseuser do : ac_fn_c_check_func "$LINENO" "getseuser" "ac_cv_func_getseuser" if test "x$ac_cv_func_getseuser" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETSEUSER 1 _ACEOF fi done LIBS=$BACKUP_LIBS fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if test "${ac_cv_search_opendir+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then : break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if test "${ac_cv_search_opendir+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then : break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if test "${ac_cv_header_sys_wait_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi for ac_header in fcntl.h limits.h malloc.h sys/file.h sys/ioctl.h sys/time.h syslog.h net/if.h termio.h unistd.h sys/fsuid.h inittypes.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header 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 lastlog.h utmp.h utmpx.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header 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:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if test "${ac_cv_c_bigendian+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no 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 if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no 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 if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if test "${ac_cv_c_const+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 $as_echo_n "checking for uid_t in sys/types.h... " >&6; } if test "${ac_cv_type_uid_t+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then : ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 $as_echo "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then $as_echo "#define uid_t int" >>confdefs.h $as_echo "#define gid_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if test "${ac_cv_header_time+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test "${ac_cv_struct_tm+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5 $as_echo_n "checking type of array argument to getgroups... " >&6; } if test "${ac_cv_type_getgroups+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_type_getgroups=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Mike Rendell for this test. */ $ac_includes_default #define NGID 256 #undef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) int main () { gid_t gidset[NGID]; int i, n; union { gid_t gval; long int lval; } val; val.lval = -1; for (i = 0; i < NGID; i++) gidset[i] = val.gval; n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, gidset); /* Exit non-zero if getgroups seems to require an array of ints. This happens when gid_t is short int but getgroups modifies an array of ints. */ return n > 0 && gidset[n] != val.gval; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_type_getgroups=gid_t else ac_cv_type_getgroups=int fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_type_getgroups = cross; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then : ac_cv_type_getgroups=gid_t else ac_cv_type_getgroups=int fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 $as_echo "$ac_cv_type_getgroups" >&6; } cat >>confdefs.h <<_ACEOF #define GETGROUPS_T $ac_cv_type_getgroups _ACEOF if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if test "${ac_cv_prog_gcc_traditional+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 $as_echo_n "checking for working memcmp... " >&6; } if test "${ac_cv_func_memcmp_working+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_memcmp_working=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Some versions of memcmp are not 8-bit clean. */ char c0 = '\100', c1 = '\200', c2 = '\201'; if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) return 1; /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); if (memcmp (a, b, 16) >= 0) return 1; } return 0; } ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_memcmp_working=yes else ac_cv_func_memcmp_working=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5 $as_echo "$ac_cv_func_memcmp_working" >&6; } test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in *" memcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; esac for ac_func in vprintf do : ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" if test "x$ac_cv_func_vprintf" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VPRINTF 1 _ACEOF ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = x""yes; then : $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi fi done for ac_func in fseeko getdomainname gethostname gettimeofday lckpwdf mkdir select do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var 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 strcspn strdup strspn strstr strtol uname do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var 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 getutent_r getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var 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 getgrouplist getline getdelim do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var 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 inet_ntop inet_pton innetgr ruserok_af do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var 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 unshare do : ac_fn_c_check_func "$LINENO" "unshare" "ac_cv_func_unshare" if test "x$ac_cv_func_unshare" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNSHARE 1 _ACEOF UNSHARE=yes else UNSHARE=no fi done if test "$UNSHARE" = yes; then HAVE_UNSHARE_TRUE= HAVE_UNSHARE_FALSE='#' else HAVE_UNSHARE_TRUE='#' HAVE_UNSHARE_FALSE= fi # Check whether --enable-regenerate-docu was given. if test "${enable_regenerate_docu+set}" = set; then : enableval=$enable_regenerate_docu; enable_docu=$enableval else enable_docu=yes fi # Extract the first word of "xsltproc", so it can be a program name with args. set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XSLTPROC+set}" = set; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in [\\/]* | ?:[\\/]*) ac_cv_path_XSLTPROC="$XSLTPROC" # 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_XSLTPROC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XSLTPROC=$ac_cv_path_XSLTPROC if test -n "$XSLTPROC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 $as_echo "$XSLTPROC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XSLTPROC"; then enable_docu=no fi # Extract the first word of "xmllint", so it can be a program name with args. set dummy xmllint; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XMLLINT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $XMLLINT in [\\/]* | ?:[\\/]*) ac_cv_path_XMLLINT="$XMLLINT" # 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_XMLLINT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_XMLLINT" && ac_cv_path_XMLLINT="/bin/true" ;; esac fi XMLLINT=$ac_cv_path_XMLLINT if test -n "$XMLLINT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5 $as_echo "$XMLLINT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # check for the presence of the XML catalog # Check whether --with-xml-catalog was given. if test "${with_xml_catalog+set}" = set; then : withval=$with_xml_catalog; else with_xml_catalog=/etc/xml/catalog fi jh_found_xmlcatalog=true XML_CATALOG_FILE="$with_xml_catalog" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML catalog ($XML_CATALOG_FILE)" >&5 $as_echo_n "checking for XML catalog ($XML_CATALOG_FILE)... " >&6; } if test -f "$XML_CATALOG_FILE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } else jh_found_xmlcatalog=false { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi # check for the xmlcatalog program # Extract the first word of "xmlcatalog", so it can be a program name with args. set dummy xmlcatalog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XMLCATALOG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $XMLCATALOG in [\\/]* | ?:[\\/]*) ac_cv_path_XMLCATALOG="$XMLCATALOG" # 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_XMLCATALOG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_XMLCATALOG" && ac_cv_path_XMLCATALOG="no" ;; esac fi XMLCATALOG=$ac_cv_path_XMLCATALOG if test -n "$XMLCATALOG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLCATALOG" >&5 $as_echo "$XMLCATALOG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XMLCATALOG" = xno; then jh_found_xmlcatalog=false fi if $jh_found_xmlcatalog; then : else : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook XML DTD V4.4 in XML catalog" >&5 $as_echo_n "checking for DocBook XML DTD V4.4 in XML catalog... " >&6; } if $jh_found_xmlcatalog && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"-//OASIS//DTD DocBook XML V4.4//EN\" >&2"; } >&5 ($XMLCATALOG --noout "$XML_CATALOG_FILE" "-//OASIS//DTD DocBook XML V4.4//EN" >&2) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } enable_docu=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook XSL Stylesheets in XML catalog" >&5 $as_echo_n "checking for DocBook XSL Stylesheets in XML catalog... " >&6; } if $jh_found_xmlcatalog && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\" >&2"; } >&5 ($XMLCATALOG --noout "$XML_CATALOG_FILE" "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl" >&2) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } enable_docu=no fi # Extract the first word of "w3m", so it can be a program name with args. set dummy w3m; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_BROWSER+set}" = set; then : $as_echo_n "(cached) " >&6 else case $BROWSER in [\\/]* | ?:[\\/]*) ac_cv_path_BROWSER="$BROWSER" # 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_BROWSER="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi BROWSER=$ac_cv_path_BROWSER if test -n "$BROWSER"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BROWSER" >&5 $as_echo "$BROWSER" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z "$BROWSER"; then BROWSER="$BROWSER -T text/html -dump" else enable_docu=no fi # Extract the first word of "fop", so it can be a program name with args. set dummy fop; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_FO2PDF+set}" = set; then : $as_echo_n "(cached) " >&6 else case $FO2PDF in [\\/]* | ?:[\\/]*) ac_cv_path_FO2PDF="$FO2PDF" # 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_FO2PDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi FO2PDF=$ac_cv_path_FO2PDF if test -n "$FO2PDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FO2PDF" >&5 $as_echo "$FO2PDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$enable_docu != xno; then ENABLE_REGENERATE_MAN_TRUE= ENABLE_REGENERATE_MAN_FALSE='#' else ENABLE_REGENERATE_MAN_TRUE='#' ENABLE_REGENERATE_MAN_FALSE= fi if test ! -z "$FO2PDF"; then ENABLE_GENERATE_PDF_TRUE= ENABLE_GENERATE_PDF_FALSE='#' else ENABLE_GENERATE_PDF_TRUE='#' ENABLE_GENERATE_PDF_FALSE= fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_gnugettext1_libc=yes else gt_cv_func_gnugettext1_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_gnugettext1_libintl=yes else gt_cv_func_gnugettext1_libintl=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext1_libintl=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$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 $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$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 $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" for ac_func in dngettext do : ac_fn_c_check_func "$LINENO" "dngettext" "ac_cv_func_dngettext" if test "x$ac_cv_func_dngettext" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DNGETTEXT 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "__NR_keyctl" "ac_cv_have_decl___NR_keyctl" "#include " if test "x$ac_cv_have_decl___NR_keyctl" = x""yes; then : have_key_syscalls=1 else have_key_syscalls=0 fi ac_fn_c_check_decl "$LINENO" "ENOKEY" "ac_cv_have_decl_ENOKEY" "#include " if test "x$ac_cv_have_decl_ENOKEY" = x""yes; then : have_key_errors=1 else have_key_errors=0 fi HAVE_KEY_MANAGEMENT=0 if test $have_key_syscalls$have_key_errors = 11 then HAVE_KEY_MANAGEMENT=1 fi if test $HAVE_KEY_MANAGEMENT = 1; then $as_echo "#define HAVE_KEY_MANAGEMENT 1" >>confdefs.h fi HAVE_KEY_MANAGEMENT=$HAVE_KEY_MANAGEMENT if test "$have_key_syscalls" = 1; then HAVE_KEY_MANAGEMENT_TRUE= HAVE_KEY_MANAGEMENT_FALSE='#' else HAVE_KEY_MANAGEMENT_TRUE='#' HAVE_KEY_MANAGEMENT_FALSE= fi ac_config_files="$ac_config_files Makefile libpam/Makefile libpamc/Makefile libpamc/test/Makefile libpam_misc/Makefile conf/Makefile conf/pam_conv1/Makefile po/Makefile.in modules/Makefile modules/pam_access/Makefile modules/pam_cracklib/Makefile modules/pam_debug/Makefile modules/pam_deny/Makefile modules/pam_echo/Makefile modules/pam_env/Makefile modules/pam_faildelay/Makefile modules/pam_filter/Makefile modules/pam_filter/upperLOWER/Makefile modules/pam_ftp/Makefile modules/pam_group/Makefile modules/pam_issue/Makefile modules/pam_keyinit/Makefile modules/pam_lastlog/Makefile modules/pam_limits/Makefile modules/pam_listfile/Makefile modules/pam_localuser/Makefile modules/pam_loginuid/Makefile modules/pam_mail/Makefile modules/pam_mkhomedir/Makefile modules/pam_motd/Makefile modules/pam_namespace/Makefile modules/pam_nologin/Makefile modules/pam_permit/Makefile modules/pam_pwhistory/Makefile modules/pam_rhosts/Makefile modules/pam_rootok/Makefile modules/pam_exec/Makefile modules/pam_securetty/Makefile modules/pam_selinux/Makefile modules/pam_sepermit/Makefile modules/pam_shells/Makefile modules/pam_stress/Makefile modules/pam_succeed_if/Makefile modules/pam_tally/Makefile modules/pam_tally2/Makefile modules/pam_time/Makefile modules/pam_timestamp/Makefile modules/pam_tty_audit/Makefile modules/pam_umask/Makefile modules/pam_unix/Makefile modules/pam_userdb/Makefile modules/pam_warn/Makefile modules/pam_wheel/Makefile modules/pam_xauth/Makefile doc/Makefile doc/specs/Makefile doc/man/Makefile doc/sag/Makefile doc/adg/Makefile doc/mwg/Makefile examples/Makefile tests/Makefile xtests/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:${as_lineno-$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= ;; #( *) { eval $ac_var=; 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:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$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. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${STATIC_MODULES_TRUE}" && test -z "${STATIC_MODULES_FALSE}"; then as_fn_error "conditional \"STATIC_MODULES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_VERSIONING_TRUE}" && test -z "${HAVE_VERSIONING_FALSE}"; then as_fn_error "conditional \"HAVE_VERSIONING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBCRACK_TRUE}" && test -z "${HAVE_LIBCRACK_FALSE}"; then as_fn_error "conditional \"HAVE_LIBCRACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_AUDIT_TTY_STATUS_TRUE}" && test -z "${HAVE_AUDIT_TTY_STATUS_FALSE}"; then as_fn_error "conditional \"HAVE_AUDIT_TTY_STATUS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBDB_TRUE}" && test -z "${HAVE_LIBDB_FALSE}"; then as_fn_error "conditional \"HAVE_LIBDB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBSELINUX_TRUE}" && test -z "${HAVE_LIBSELINUX_FALSE}"; then as_fn_error "conditional \"HAVE_LIBSELINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_UNSHARE_TRUE}" && test -z "${HAVE_UNSHARE_FALSE}"; then as_fn_error "conditional \"HAVE_UNSHARE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_REGENERATE_MAN_TRUE}" && test -z "${ENABLE_REGENERATE_MAN_FALSE}"; then as_fn_error "conditional \"ENABLE_REGENERATE_MAN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GENERATE_PDF_TRUE}" && test -z "${ENABLE_GENERATE_PDF_FALSE}"; then as_fn_error "conditional \"ENABLE_GENERATE_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_KEY_MANAGEMENT_TRUE}" && test -z "${HAVE_KEY_MANAGEMENT_FALSE}"; then as_fn_error "conditional \"HAVE_KEY_MANAGEMENT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 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:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_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} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_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 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 # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (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 # 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 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi 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'` # 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 ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac 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 # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { 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_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' 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 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=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.65. 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 and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, 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 the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" Copyright (C) 2009 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 ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; 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 as_fn_append 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 as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --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_fn_error "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append 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_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $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 "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libpam/Makefile") CONFIG_FILES="$CONFIG_FILES libpam/Makefile" ;; "libpamc/Makefile") CONFIG_FILES="$CONFIG_FILES libpamc/Makefile" ;; "libpamc/test/Makefile") CONFIG_FILES="$CONFIG_FILES libpamc/test/Makefile" ;; "libpam_misc/Makefile") CONFIG_FILES="$CONFIG_FILES libpam_misc/Makefile" ;; "conf/Makefile") CONFIG_FILES="$CONFIG_FILES conf/Makefile" ;; "conf/pam_conv1/Makefile") CONFIG_FILES="$CONFIG_FILES conf/pam_conv1/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;; "modules/pam_access/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_access/Makefile" ;; "modules/pam_cracklib/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_cracklib/Makefile" ;; "modules/pam_debug/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_debug/Makefile" ;; "modules/pam_deny/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_deny/Makefile" ;; "modules/pam_echo/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_echo/Makefile" ;; "modules/pam_env/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_env/Makefile" ;; "modules/pam_faildelay/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_faildelay/Makefile" ;; "modules/pam_filter/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_filter/Makefile" ;; "modules/pam_filter/upperLOWER/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_filter/upperLOWER/Makefile" ;; "modules/pam_ftp/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_ftp/Makefile" ;; "modules/pam_group/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_group/Makefile" ;; "modules/pam_issue/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_issue/Makefile" ;; "modules/pam_keyinit/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_keyinit/Makefile" ;; "modules/pam_lastlog/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_lastlog/Makefile" ;; "modules/pam_limits/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_limits/Makefile" ;; "modules/pam_listfile/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_listfile/Makefile" ;; "modules/pam_localuser/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_localuser/Makefile" ;; "modules/pam_loginuid/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_loginuid/Makefile" ;; "modules/pam_mail/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_mail/Makefile" ;; "modules/pam_mkhomedir/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_mkhomedir/Makefile" ;; "modules/pam_motd/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_motd/Makefile" ;; "modules/pam_namespace/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_namespace/Makefile" ;; "modules/pam_nologin/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_nologin/Makefile" ;; "modules/pam_permit/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_permit/Makefile" ;; "modules/pam_pwhistory/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_pwhistory/Makefile" ;; "modules/pam_rhosts/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_rhosts/Makefile" ;; "modules/pam_rootok/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_rootok/Makefile" ;; "modules/pam_exec/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_exec/Makefile" ;; "modules/pam_securetty/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_securetty/Makefile" ;; "modules/pam_selinux/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_selinux/Makefile" ;; "modules/pam_sepermit/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_sepermit/Makefile" ;; "modules/pam_shells/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_shells/Makefile" ;; "modules/pam_stress/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_stress/Makefile" ;; "modules/pam_succeed_if/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_succeed_if/Makefile" ;; "modules/pam_tally/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_tally/Makefile" ;; "modules/pam_tally2/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_tally2/Makefile" ;; "modules/pam_time/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_time/Makefile" ;; "modules/pam_timestamp/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_timestamp/Makefile" ;; "modules/pam_tty_audit/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_tty_audit/Makefile" ;; "modules/pam_umask/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_umask/Makefile" ;; "modules/pam_unix/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_unix/Makefile" ;; "modules/pam_userdb/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_userdb/Makefile" ;; "modules/pam_warn/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_warn/Makefile" ;; "modules/pam_wheel/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_wheel/Makefile" ;; "modules/pam_xauth/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_xauth/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/specs/Makefile") CONFIG_FILES="$CONFIG_FILES doc/specs/Makefile" ;; "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;; "doc/sag/Makefile") CONFIG_FILES="$CONFIG_FILES doc/sag/Makefile" ;; "doc/adg/Makefile") CONFIG_FILES="$CONFIG_FILES doc/adg/Makefile" ;; "doc/mwg/Makefile") CONFIG_FILES="$CONFIG_FILES doc/mwg/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "xtests/Makefile") CONFIG_FILES="$CONFIG_FILES xtests/Makefile" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; 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 'as_fn_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_fn_error "cannot create a temporary directory in ." "$LINENO" 5 # 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=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi 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_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 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_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 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_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 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_fn_error "could not setup config files machinery" "$LINENO" 5 _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_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 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_fn_error "could not setup config headers machinery" "$LINENO" 5 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_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[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_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append 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:${as_lineno-$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_fn_error "could not create $ac_file" "$LINENO" 5 ;; 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"; as_fn_mkdir_p 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:${as_lineno-$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_fn_error "could not create $ac_file" "$LINENO" 5 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:${as_lineno-$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_fn_error "could not create $ac_file" "$LINENO" 5 ;; :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_fn_error "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$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_fn_error "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error "could not create -" "$LINENO" 5 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:${as_lineno-$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"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf 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; as_fn_mkdir_p # 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 static libraries. build_old_libs=$enable_static # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # 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 as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 # 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 || as_fn_exit $? fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi Linux-PAM-1.1.8/aclocal.m40000644000000000000000000012235012216527533011773 00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 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(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, [m4_warning([this file was generated for autoconf 2.65. 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'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # 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. # # 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. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 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. # 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.11' 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.11.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 AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([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, 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 9 # 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 m4_define([_AM_COND_VALUE_$1], [$2])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, 2009 # 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 10 # 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 am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) 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 # 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. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; 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 ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj 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 $am__obj 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, 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 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf 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"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 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 16 # 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.62])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) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl 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 ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # 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, 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. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi 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])]) # Copyright (C) 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 5 # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_PREREQ(2.50)dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 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_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .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 # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac 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, 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 6 # 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 am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != 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, 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 6 # 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 if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # 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, 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 4 # _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], [m4_foreach_w([_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, 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 5 # 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 # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # 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, 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 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_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/gettext.m4]) m4_include([m4/iconv.m4]) m4_include([m4/japhar_grep_cflags.m4]) m4_include([m4/jh_path_xml_catalog.m4]) m4_include([m4/ld-O1.m4]) m4_include([m4/ld-as-needed.m4]) m4_include([m4/ld-no-undefined.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/libprelude.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]) Linux-PAM-1.1.8/m4/0000755000000000000000000000000012216542310010516 500000000000000Linux-PAM-1.1.8/m4/jh_path_xml_catalog.m40000644000000000000000000000321712160065211014670 00000000000000# Checks the location of the XML Catalog # Usage: # JH_PATH_XML_CATALOG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # Defines XMLCATALOG and XML_CATALOG_FILE substitutions AC_DEFUN([JH_PATH_XML_CATALOG], [ # check for the presence of the XML catalog AC_ARG_WITH([xml-catalog], AC_HELP_STRING([--with-xml-catalog=CATALOG], [path to xml catalog to use]),, [with_xml_catalog=/etc/xml/catalog]) jh_found_xmlcatalog=true XML_CATALOG_FILE="$with_xml_catalog" AC_SUBST([XML_CATALOG_FILE]) AC_MSG_CHECKING([for XML catalog ($XML_CATALOG_FILE)]) if test -f "$XML_CATALOG_FILE"; then AC_MSG_RESULT([found]) else jh_found_xmlcatalog=false AC_MSG_RESULT([not found]) fi # check for the xmlcatalog program AC_PATH_PROG(XMLCATALOG, xmlcatalog, no) if test "x$XMLCATALOG" = xno; then jh_found_xmlcatalog=false fi if $jh_found_xmlcatalog; then ifelse([$1],,[:],[$1]) else ifelse([$2],,[AC_MSG_ERROR([could not find XML catalog])],[$2]) fi ]) # Checks if a particular URI appears in the XML catalog # Usage: # JH_CHECK_XML_CATALOG(URI, [FRIENDLY-NAME], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) AC_DEFUN([JH_CHECK_XML_CATALOG], [ AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog]) if $jh_found_xmlcatalog && \ AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then AC_MSG_RESULT([found]) ifelse([$3],,,[$3 ])dnl else AC_MSG_RESULT([not found]) ifelse([$4],, [AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])], [$4]) fi ]) Linux-PAM-1.1.8/m4/ltoptions.m40000644000000000000000000002724212216527531012752 00000000000000# 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])]) Linux-PAM-1.1.8/m4/ld-no-undefined.m40000644000000000000000000000117112160065211013646 00000000000000# ld-no-undefined.m4 serial 1 # Test if ld supports --no-undefined AC_DEFUN([PAM_LD_NO_UNDEFINED], [ AC_CACHE_CHECK(whether ld supports --no-undefined, pam_cv_ld_no_undefined, [ dnl cat > conftest.c <&AS_MESSAGE_LOG_FD]) then pam_cv_ld_no_undefined=yes LDFLAGS="$LDFLAGS -Wl,--no-undefined" else pam_cv_ld_no_undefined=no fi rm -f conftest*]) AC_SUBST(pam_cv_ld_no_undefined) ] ) Linux-PAM-1.1.8/m4/nls.m40000644000000000000000000000226612160066615011511 00000000000000# 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) ]) Linux-PAM-1.1.8/m4/japhar_grep_cflags.m40000644000000000000000000000157012160065211014502 00000000000000dnl 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 ]) dnl dnl Test for __attribute__ ((unused)) dnl Based on code from the tcpdump version 3.7.2 source. dnl AC_DEFUN([AC_C___ATTRIBUTE__], [ AC_MSG_CHECKING(for __attribute__) AC_CACHE_VAL(ac_cv___attribute__, [ AC_TRY_COMPILE([ #include static void foo (void) __attribute__ ((unused)); static void foo (void) { exit(1); } ], [ exit (0); ], ac_cv___attribute__=yes, ac_cv___attribute__=no)]) if test "$ac_cv___attribute__" = "yes"; then AC_DEFINE(UNUSED, __attribute__ ((unused)), [define if your compiler has __att ribute__ ((unused))]) else AC_DEFINE(UNUSED,,) fi AC_MSG_RESULT($ac_cv___attribute__) ]) Linux-PAM-1.1.8/m4/ld-as-needed.m40000644000000000000000000000113312160065211013116 00000000000000# ld-as-needed.m4 serial 2 # Test if ld supports --as-needed AC_DEFUN([PAM_LD_AS_NEEDED], [ AC_CACHE_CHECK(whether ld supports --as-needed, pam_cv_ld_as_needed, [ dnl cat > conftest.c <&AS_MESSAGE_LOG_FD]) then pam_cv_ld_as_needed=yes LDFLAGS="$LDFLAGS -Wl,--as-needed" else pam_cv_ld_as_needed=no fi rm -f conftest*]) AC_SUBST(pam_cv_ld_as_needed) ] ) Linux-PAM-1.1.8/m4/ltsugar.m40000644000000000000000000001042412216527531012372 00000000000000# 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 ]) Linux-PAM-1.1.8/m4/lib-prefix.m40000644000000000000000000001503612160066615012755 00000000000000# 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 ]) Linux-PAM-1.1.8/m4/ld-O1.m40000644000000000000000000000102112160065211011544 00000000000000# ld-O1.m4 serial 3 # Test if ld supports -O1 AC_DEFUN([PAM_LD_O1], [ AC_CACHE_CHECK(whether ld supports -O1, pam_cv_ld_O1, [ dnl cat > conftest.c <&AS_MESSAGE_LOG_FD]) then pam_cv_ld_O1=yes LDFLAGS="$LDFLAGS -Wl,-O1" else pam_cv_ld_O1=no fi rm -f conftest*]) AC_SUBST(pam_cv_ld_O1) ] ) Linux-PAM-1.1.8/m4/po.m40000644000000000000000000004336712160066615011342 00000000000000# 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" <, 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], []) Linux-PAM-1.1.8/m4/lib-link.m40000644000000000000000000006304612160066615012421 00000000000000# 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]) ]) Linux-PAM-1.1.8/m4/lib-ld.m40000644000000000000000000000653112160066615012057 00000000000000# 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 ]) Linux-PAM-1.1.8/m4/libprelude.m40000644000000000000000000001666112160065211013037 00000000000000dnl Autoconf macros for libprelude dnl $id$ # Modified for LIBPRELUDE -- Yoann Vandoorselaere # Modified for LIBGNUTLS -- nmav # Configure paths for LIBGCRYPT # Shamelessly stolen from the one of XDELTA by Owen Taylor # Werner Koch 99-12-09 dnl AM_PATH_LIBPRELUDE([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libprelude, and define LIBPRELUDE_PREFIX, LIBPRELUDE_CFLAGS, LIBPRELUDE_PTHREAD_CFLAGS, dnl LIBPRELUDE_LDFLAGS, and LIBPRELUDE_LIBS dnl AC_DEFUN([AM_PATH_LIBPRELUDE], [dnl dnl Get the cflags and libraries from the libprelude-config script dnl AC_ARG_WITH(libprelude-prefix, AC_HELP_STRING(--with-libprelude-prefix=PFX, Prefix where libprelude is installed (optional)), libprelude_config_prefix="$withval", libprelude_config_prefix="") if test x$libprelude_config_prefix != x ; then if test x${LIBPRELUDE_CONFIG+set} != xset ; then LIBPRELUDE_CONFIG=$libprelude_config_prefix/bin/libprelude-config fi fi AC_PATH_PROG(LIBPRELUDE_CONFIG, libprelude-config, no) min_libprelude_version=ifelse([$1], ,0.1.0,$1) AC_MSG_CHECKING(for libprelude - version >= $min_libprelude_version) no_libprelude="" if test "$LIBPRELUDE_CONFIG" = "no" ; then no_libprelude=yes else LIBPRELUDE_CFLAGS=`$LIBPRELUDE_CONFIG $libprelude_config_args --cflags` LIBPRELUDE_PTHREAD_CFLAGS=`$LIBPRELUDE_CONFIG $libprelude_config_args --pthread-cflags` LIBPRELUDE_LDFLAGS=`$LIBPRELUDE_CONFIG $libprelude_config_args --ldflags` LIBPRELUDE_LIBS=`$LIBPRELUDE_CONFIG $libprelude_config_args --libs` LIBPRELUDE_PREFIX=`$LIBPRELUDE_CONFIG $libprelude_config_args --prefix` LIBPRELUDE_CONFIG_PREFIX=`$LIBPRELUDE_CONFIG $libprelude_config_args --config-prefix` libprelude_config_version=`$LIBPRELUDE_CONFIG $libprelude_config_args --version` ac_save_CFLAGS="$CFLAGS" ac_save_LDFLAGS="$LDFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $LIBPRELUDE_CFLAGS" LDFLAGS="$LDFLAGS $LIBPRELUDE_LDFLAGS" LIBS="$LIBS $LIBPRELUDE_LIBS" dnl dnl Now check if the installed libprelude is sufficiently new. Also sanity dnl checks the results of libprelude-config to some extent dnl rm -f conf.libpreludetest AC_TRY_RUN([ #include #include #include #include int main () { system ("touch conf.libpreludetest"); if( strcmp( prelude_check_version(NULL), "$libprelude_config_version" ) ) { printf("\n*** 'libprelude-config --version' returned %s, but LIBPRELUDE (%s)\n", "$libprelude_config_version", prelude_check_version(NULL) ); printf("*** was found! If libprelude-config was correct, then it is best\n"); printf("*** to remove the old version of LIBPRELUDE. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If libprelude-config was wrong, set the environment variable LIBPRELUDE_CONFIG\n"); printf("*** to point to the correct copy of libprelude-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } else if ( strcmp(prelude_check_version(NULL), LIBPRELUDE_VERSION ) ) { printf("\n*** LIBPRELUDE header file (version %s) does not match\n", LIBPRELUDE_VERSION); printf("*** library (version %s)\n", prelude_check_version(NULL) ); } else { if ( prelude_check_version( "$min_libprelude_version" ) ) { return 0; } else { printf("no\n*** An old version of LIBPRELUDE (%s) was found.\n", prelude_check_version(NULL) ); printf("*** You need a version of LIBPRELUDE newer than %s. The latest version of\n", "$min_libprelude_version" ); printf("*** LIBPRELUDE is always available from http://www.prelude-ids.org/download/releases.\n"); printf("*** \n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the libprelude-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of LIBPRELUDE, but you can also set the LIBPRELUDE_CONFIG environment to point to the\n"); printf("*** correct copy of libprelude-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_libprelude=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" LDFLAGS="$ac_save_LDFLAGS" fi if test "x$no_libprelude" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else if test -f conf.libpreludetest ; then : else AC_MSG_RESULT(no) fi if test "$LIBPRELUDE_CONFIG" = "no" ; then echo "*** The libprelude-config script installed by LIBPRELUDE could not be found" echo "*** If LIBPRELUDE was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the LIBPRELUDE_CONFIG environment variable to the" echo "*** full path to libprelude-config." else if test -f conf.libpreludetest ; then : else echo "*** Could not run libprelude test program, checking why..." CFLAGS="$CFLAGS $LIBPRELUDE_CFLAGS" LDFLAGS="$LDFLAGS $LIBPRELUDE_LDFLAGS" LIBS="$LIBS $LIBPRELUDE_LIBS" AC_TRY_LINK([ #include #include #include #include ], [ return !!prelude_check_version(NULL); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding LIBPRELUDE or finding the wrong" echo "*** version of LIBPRELUDE. If it is not finding LIBPRELUDE, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means LIBPRELUDE was incorrectly installed" echo "*** or that you have moved LIBPRELUDE since it was installed. In the latter case, you" echo "*** may want to edit the libprelude-config script: $LIBPRELUDE_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LDFLAGS="$ac_save_LDFLAGS" LIBS="$ac_save_LIBS" fi fi LIBPRELUDE_CFLAGS="" LIBPRELUDE_LDFLAGS="" LIBPRELUDE_LIBS="" ifelse([$3], , :, [$3]) fi rm -f conf.libpreludetest AC_SUBST(LIBPRELUDE_CFLAGS) AC_SUBST(LIBPRELUDE_PTHREAD_CFLAGS) AC_SUBST(LIBPRELUDE_LDFLAGS) AC_SUBST(LIBPRELUDE_LIBS) AC_SUBST(LIBPRELUDE_PREFIX) AC_SUBST(LIBPRELUDE_CONFIG_PREFIX) ]) dnl *-*wedit:notab*-* Please keep this as the last line. Linux-PAM-1.1.8/m4/iconv.m40000644000000000000000000000642612160066615012035 00000000000000# 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 ]) Linux-PAM-1.1.8/m4/lt~obsolete.m40000644000000000000000000001311312216527531013261 00000000000000# 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])]) Linux-PAM-1.1.8/m4/progtest.m40000644000000000000000000000555012160066615012563 00000000000000# 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 ]) Linux-PAM-1.1.8/m4/ltversion.m40000644000000000000000000000127512216527531012742 00000000000000# 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) ]) Linux-PAM-1.1.8/m4/libtool.m40000644000000000000000000077317612216527531012401 00000000000000# 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 ]) Linux-PAM-1.1.8/NEWS0000644000000000000000000002215312216316444010627 00000000000000Linux-PAM NEWS -- history of user-visible changes. Release 1.1.8 * pam_unix: bug fix for compiling with SELinux, fix crash at login time Release 1.1.7 * Update translations * pam_exec: add stdout and type= options * pam_tty_audit: add options to control logging of passwords * pam_unix: Read defaults from /etc/login.defs * pam_userdb: Allow modern password hashes * pam_selinux/pam_tally2: Add tty and rhost to audit data * Lot of docu and code fixes Release 1.1.6 * Update translations * pam_cracklib: Add more checks for weak passwords * pam_lastlog: Never lock out root * Lot of bug fixes and smaller enhancements Release 1.1.5 * pam_env: Fix CVE-2011-3148 and CVE-2011-3149 * pam_access: Add hostname resolution cache * Documentation: Improvements/fixes Release 1.1.4 * Add vietnamese translation * pam_namepace: Add new functionality * pam_securetty: Honour console= kernel option, add noconsole option * pam_limits: Add %group syntax, drop change_uid option, add set_all option * Lot of small bug fixes * Lot of compiler warnings fixed * Add support for libtirpc Release 1.1.3 * pam_namespace: Clean environment for childs (CVE-2010-3853) * libpam: New interface to drop/regain privilegs * Drop root privilegs in pam_env, pam_mail and pam_xauth before accessing user files (CVE-2010-3430, CVE-2010-3431) * pam_unix: Add minlen option, change default from 6 to 0 * Documentation improvements * Lot of small bug fixes Release 1.1.2 * pam_unix: Add minlen= option * pam_group: Add support for UNIX groups beside netgroups * pam_tally: Document that it is deprecated * pam_rootok: Add support for chauthtok and acct_mgmt * Update translations Release 1.1.1 * Update translations * pam_access: Revert netgroup match to original behavior, add new syntax for adding the local hostname to netgroup match * libpam: Add new functions pam_get_authtok_noverify() and pam_get_authtok_verify() * Add sepermit.conf.5 manual page * Lot of bug fixes Release 1.1.0 * Update translations * Documentation updates and fixes Release 1.0.92 * Update translations * pam_succeed_if: Use provided username * pam_mkhomedir: Fix handling of options Release 1.0.91 * Fixed CVE-2009-0579 (minimum days limit on password change is ignored). * Fix libpam internal config/argument parser * Add optional file locking to pam_tally2 * Update translations * pam_access improvements * Changes in the behavior of the password stack. Results of PRELIM_CHECK are not used for the final run. Release 1.0.90 * Supply hostname of the machine to netgroup match call in pam_access * Make pam_namespace to work safe on child directories of parent directories owned by users * Redefine LOCAL keyword of pam_access configuration file * Add support for try_first_pass and use_first_pass to pam_cracklib * Print informative messages for rejected login and add silent and no_log_info options to pam_tally * Add support for passing PAM_AUTHTOK to stdin of helpers from pam_exec * New password quality tests in pam_cracklib * New options for pam_lastlog to show last failed login attempt and to disable lastlog update * New pam_pwhistory module to store last used passwords * New pam_tally2 module similar to pam_tally with wordsize independent tally data format * Make libpam not log missing module if its type is prepended with '-' * New pam_timestamp module for authentication based on recent successful login. * Add blowfish support to pam_unix. * Add support for user specific environment file to pam_env. * Add pam_get_authtok to libpam as Linux-PAM extension. * Rename type option of pam_cracklib to authtok_type. Release 1.0.3 * Small bug fix release Release 1.0.2 * Regression fixed in pam_selinux * Problem with big UIDs fixed in pam_loginuid Release 1.0.1 * Regression fixed in pam_set_item() Release 1.0.0 * Small bug fixes * Translation updates Release 0.99.10.0 * New substack directive in config file syntax. * New module pam_tty_audit.so for enabling and disabling tty auditing. * New PAM items PAM_XDISPLAY and PAM_XAUTHDATA. * Auditing login denials based by origin (pam_access), time (pam_time), and number of sessions (pam_limits) to the Linux audit subsystem. * Support sha256 and sha512 algorithms in pam_unix when they are supported by crypt(). * New pam_sepermit.so module for allowing/rejecting access based on SELinux mode. * Improved functionality of pam_namespace.so module (method flags, namespace.d configuration directory, new options). * Finaly removed deprecated pam_rhosts_auth module. Release 0.99.9.0 * misc_conv no longer blocks SIGINT; applications that don't want user-interruptable prompts should block SIGINT themselves * Merge fixes from Debian * Fix parser for pam_group and pam_time Release 0.99.8.1 * Fix a regression in audit code introduced with last release * Fix compiling with --disable-nls Release 0.99.8.0 * Add translations for ar, ca, da, ru, sv and zu. * Update hungarian translation. * Add support for limits.d directory to pam_limits. * Improve pam_namespace module tobe more useful for MLS, fixed crash with bad config files. * Improve pam_selinux module to be more useful for MLS. * Add minclass option to pam_cracklib * Add new group syntax to pam_access Release 0.99.7.1 * Security fix for pam_unix.so (CVE-2007-0003). Release 0.99.7.0 * Add manual page for pam_unix.so. * Add pam_faildelay module to set pam_fail_delay() value. * Fix possible seg.fault in libpam/pam_set_data(). * Cleanup of configure options. * Update hungarian translation, fix german translation. Release 0.99.6.3 * pam_loginuid: New PAM module. * pam_access, pam_succeed_if: Support passwd and session services. Release 0.99.6.2 * pam_lastlog: Don't refuse login if lastlog file got lost. * pam_cracklib: Fix a user triggerable crash. * documentation: Regenerate with fixed docbook stylesheet. Release 0.99.6.1 * Fix bootstrapping problems. * Bug fixes: pam_keyinit, pam_umask Release 0.99.6.0 * pam_namespace: Code cleanup, add init script to tar archive. * pam_succeed_if: Add support for service match. * Add xtests (to run after installation). * Documentation: Convert sgml guides to XML, unify documentation for PAM functions and modules. Release 0.99.5.0 * pam_tally: Fix support for large UIDs * Fixed all problems found by Coverity * Add support for Intel C Compiler * Add manual page for pam_mkhomedir, pam_umask, pam_filter, pam_issue, pam_ftp, pam_group, pam_lastlog, pam_listfile, pam_localuser, pam_mail, pam_motd, pam_nologin, pam_permit, pam_rootok, pam_securetty, pam_shells, pam_userdb, pam_warn, pam_time, pam_limits, pam_debug, pam_tally * The libpam memory debug code was removed * pam_keyinit: New module to initialise kernel session keyring. * pam_namespace: New module to configure private namespace for a session. * pam_rhosts: New module which replaces pam_rhosts_auth, now IPv6 capable. * pam_rhosts_auth: This module is now deprecated. Release 0.99.4.0 * Add test suite * Fix building of static variants of libpam, libpamc and libpam_misc * pam_listfile: Add support for password and session management * pam_exec: New PAM module to execute arbitary commands * Fix building of a static libpam including all PAM modules * New/updated translations for: nl, pt, pl, fi, km, tr, uk, fr * pam_access: Add network(address) / netmask and IPv6 support * Add manual pages for pam_cracklib, pam_deny and pam_access * pam_pwdb: This deprecated module was removed * Manual pages: Major rewrite/cleanup Release 0.99.3.0 * Fix NULL pointer checks in libpam.so * pam_succeed_if, pam_group, pam_time: Support netgroup matching * New translations for: nb, hu, fi, de, es, fr, it, ja, pt_BR, zh_CN, zh_TW * Audit PAM calls if Linux Audit is available * Compile upperLOWER and unix_chkpwd as PIE binaries Release 0.99.2.1 * Fix install of PS, PDF, TXT and HTML files * pam_mail: Update README * Use %m consistent * pam_modutil_getlogin: Fix parsing of PAM_TTY variable Release 0.99.2.0 * Fix parsing of full path tty name in various modules * pam_xauth: Look for xauth executable in multiple places * pam_unix: Disable user check in unix_chkpwd only if real uid is 0 (CVE-2005-2977). Log failed password check attempt. * pam_env: Support /etc/environment again, but don't treat it as error if it is missing. * pam_userdb: Fix memory leak. Release 0.99.1.0 * Use autoconf/automake/libtool * Add gettext support * Add translations for cs, de, es, fr, hu, it, ja, nb, pa, pt_BR, pt, zh_CN and zh_TW * libpam: Remove pam_authenticate_secondary stub * libpam: Add pam_prompt,pam_vprompt,pam_error,pam_verror,pam_info and pam_vinfo functions for use by modules as extension * libpam: Add pam_syslog function for unified syslog messages from PAM modules * libpam: Moved functions from pammodutil to libpam * pam_umask: New module for setting umask from GECOS field, /etc/login.defs or /etc/default/login * pam_echo: New PAM module for message output * pam_userdb: Fix regression (crash when crypt param not specified) * pam_limits: Fix regression from RLIMIT_NICE support (wrong limit values for other limits are applied) * pam_access: Support for NULL tty - matches ALL and NONE keywords * pam_lastlog: Enable log to wtmp by default. Add "nowtmp" option * pam_radius: This module was removed Linux-PAM-1.1.8/doc/0000755000000000000000000000000012216542314010747 500000000000000Linux-PAM-1.1.8/doc/adg/0000755000000000000000000000000012216542314011502 500000000000000Linux-PAM-1.1.8/doc/adg/pam_strerror.xml0000644000000000000000000000163112160065211014656 00000000000000
Strings describing PAM error codes
Linux-PAM-1.1.8/doc/adg/pam_getenvlist.xml0000644000000000000000000000164412160065211015164 00000000000000
Getting the PAM environment
Linux-PAM-1.1.8/doc/adg/pam_putenv.xml0000644000000000000000000000161312160065211014315 00000000000000
Set or change PAM environment variable
Linux-PAM-1.1.8/doc/adg/pam_acct_mgmt.xml0000644000000000000000000000163512160065211014736 00000000000000
Account validation management
Linux-PAM-1.1.8/doc/adg/pam_getenv.xml0000644000000000000000000000160312160065211014263 00000000000000
Get a PAM environment variable
Linux-PAM-1.1.8/doc/adg/pam_misc_drop_env.xml0000644000000000000000000000132512160065211015623 00000000000000
Liberating a locally saved environment
Linux-PAM-1.1.8/doc/adg/pam_get_item.xml0000644000000000000000000000161012160065211014566 00000000000000
Getting PAM items
Linux-PAM-1.1.8/doc/adg/pam_fail_delay.xml0000644000000000000000000000164312160065211015070 00000000000000
Request a delay on failure
Linux-PAM-1.1.8/doc/adg/pam_misc_setenv.xml0000644000000000000000000000131412160065211015311 00000000000000
BSD like PAM environment variable setting
Linux-PAM-1.1.8/doc/adg/Makefile.am0000644000000000000000000000721212160065211013452 00000000000000# # Copyright (c) 2006 Thorsten Kukuk # CLEANFILES = Linux-PAM_ADG.fo *~ EXTRA_DIST = $(XMLS) XMLS = Linux-PAM_ADG.xml $(shell ls $(srcdir)/pam_*.xml) DEP_XMLS = $(shell ls $(top_srcdir)/doc/man/pam_*.xml) if ENABLE_REGENERATE_MAN MAINTAINERCLEANFILES = Linux-PAM_ADG.txt Linux-PAM_ADG.pdf html/*.html all: Linux-PAM_ADG.txt html/Linux-PAM_ADG.html Linux-PAM_ADG.pdf Linux-PAM_ADG.pdf: $(XMLS) $(DEP_XMLS) if ENABLE_GENERATE_PDF $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< $(XSLTPROC) --stringparam generate.toc "book toc" \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 3 --xinclude --nonet \ http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_ADG.fo $(FO2PDF) Linux-PAM_ADG.fo $@ else echo "No fo2pdf processor installed, skip PDF generation" endif Linux-PAM_ADG.txt: $(XMLS) $(DEP_XMLS) $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< $(XSLTPROC) --stringparam generate.toc "book toc" \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 3 --xinclude --nonet \ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@ html/Linux-PAM_ADG.html: $(XMLS) $(DEP_XMLS) @test -d html || mkdir -p html $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< $(XSLTPROC) --stringparam base.dir html/ \ --stringparam root.filename Linux-PAM_ADG \ --stringparam use.id.as.filename 1 \ --stringparam chunk.first.sections 1 \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 3 --xinclude --nonet \ --stringparam chunker.output.encoding UTF-8 \ http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $< distclean-local: -rm -rf html Linux-PAM_ADG.txt Linux-PAM_ADG.pdf endif install-data-local: $(mkinstalldirs) $(DESTDIR)$(docdir) $(mkinstalldirs) $(DESTDIR)$(pdfdir) $(mkinstalldirs) $(DESTDIR)$(htmldir) test -f html/Linux-PAM_ADG.html || exit 0; \ $(install_sh_DATA) html/Linux-PAM_ADG.html html/adg-*.html \ $(DESTDIR)$(htmldir)/ || \ $(install_sh_DATA) $(srcdir)/html/Linux-PAM_ADG.html \ $(srcdir)/html/sag-*.html \ $(DESTDIR)$(htmldir)/ test -f Linux-PAM_ADG.txt || exit 0; \ $(install_sh_DATA) Linux-PAM_ADG.txt $(DESTDIR)$(docdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_ADG.txt \ $(DESTDIR)$(docdir)/ test -f Linux-PAM_ADG.pdf || exit 0; \ $(install_sh_DATA) Linux-PAM_ADG.pdf $(DESTDIR)$(pdfdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_ADG.pdf \ $(DESTDIR)$(pdfdir)/ uninstall-local: -rm $(DESTDIR)$(htmldir)/Linux-PAM_ADG.html -rm $(DESTDIR)$(htmldir)/adg-*.html -rm $(DESTDIR)$(docdir)/Linux-PAM_ADG.txt -rm $(DESTDIR)$(pdfdir)/Linux-PAM_ADG.pdf releasedocs: all $(mkinstalldirs) $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/html test -f html/Linux-PAM_ADG.html || exit 0; \ cp -ap html/Linux-PAM_ADG.html html/adg-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/html/ || \ cp -ap $(srcdir)/html/Linux-PAM_ADG.html \ $(srcdir)/html/adg-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/html/ test -f Linux-PAM_ADG.txt || exit 0; \ cp -p Linux-PAM_ADG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/ || \ cp -p $(srcdir)/Linux-PAM_ADG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/ test -f Linux-PAM_ADG.pdf || exit 0; \ cp -p Linux-PAM_ADG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/ || \ cp -p $(srcdir)/Linux-PAM_ADG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/ Linux-PAM-1.1.8/doc/adg/pam_end.xml0000644000000000000000000000155012160065211013542 00000000000000
Termination of PAM transaction
Linux-PAM-1.1.8/doc/adg/pam_open_session.xml0000644000000000000000000000166712160065211015511 00000000000000
Start PAM session management
Linux-PAM-1.1.8/doc/adg/pam_misc_conv.xml0000644000000000000000000000123712160065211014756 00000000000000
Text based conversation function
Linux-PAM-1.1.8/doc/adg/pam_conv.xml0000644000000000000000000000227512160065211013746 00000000000000
The conversation function struct pam_message { int msg_style; const char *msg; }; struct pam_response { char *resp; int resp_retcode; }; struct pam_conv { int (*conv)(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr); void *appdata_ptr; };
Linux-PAM-1.1.8/doc/adg/pam_chauthtok.xml0000644000000000000000000000163612160065211014773 00000000000000
Updating authentication tokens
Linux-PAM-1.1.8/doc/adg/pam_set_item.xml0000644000000000000000000000161012160065211014602 00000000000000
Setting PAM items
Linux-PAM-1.1.8/doc/adg/pam_setcred.xml0000644000000000000000000000160612160065211014427 00000000000000
Setting user credentials
Linux-PAM-1.1.8/doc/adg/pam_close_session.xml0000644000000000000000000000170612160065211015647 00000000000000
terminating PAM session management
Linux-PAM-1.1.8/doc/adg/pam_start.xml0000644000000000000000000000157512160065211014140 00000000000000
Initialization of PAM transaction
Linux-PAM-1.1.8/doc/adg/Makefile.in0000644000000000000000000004015512216527535013504 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2006 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/adg DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = Linux-PAM_ADG.fo *~ EXTRA_DIST = $(XMLS) XMLS = Linux-PAM_ADG.xml $(shell ls $(srcdir)/pam_*.xml) DEP_XMLS = $(shell ls $(top_srcdir)/doc/man/pam_*.xml) @ENABLE_REGENERATE_MAN_TRUE@MAINTAINERCLEANFILES = Linux-PAM_ADG.txt Linux-PAM_ADG.pdf html/*.html 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 ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/adg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/adg/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) @ENABLE_REGENERATE_MAN_FALSE@distclean-local: clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distclean-local \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ 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 uninstall-local @ENABLE_REGENERATE_MAN_TRUE@all: Linux-PAM_ADG.txt html/Linux-PAM_ADG.html Linux-PAM_ADG.pdf @ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_ADG.pdf: $(XMLS) $(DEP_XMLS) @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_ADG.fo @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(FO2PDF) Linux-PAM_ADG.fo $@ @ENABLE_GENERATE_PDF_FALSE@@ENABLE_REGENERATE_MAN_TRUE@ echo "No fo2pdf processor installed, skip PDF generation" @ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_ADG.txt: $(XMLS) $(DEP_XMLS) @ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< @ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \ @ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@ @ENABLE_REGENERATE_MAN_TRUE@html/Linux-PAM_ADG.html: $(XMLS) $(DEP_XMLS) @ENABLE_REGENERATE_MAN_TRUE@ @test -d html || mkdir -p html @ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< @ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam base.dir html/ \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam root.filename Linux-PAM_ADG \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam use.id.as.filename 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam chunk.first.sections 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam chunker.output.encoding UTF-8 \ @ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $< @ENABLE_REGENERATE_MAN_TRUE@distclean-local: @ENABLE_REGENERATE_MAN_TRUE@ -rm -rf html Linux-PAM_ADG.txt Linux-PAM_ADG.pdf install-data-local: $(mkinstalldirs) $(DESTDIR)$(docdir) $(mkinstalldirs) $(DESTDIR)$(pdfdir) $(mkinstalldirs) $(DESTDIR)$(htmldir) test -f html/Linux-PAM_ADG.html || exit 0; \ $(install_sh_DATA) html/Linux-PAM_ADG.html html/adg-*.html \ $(DESTDIR)$(htmldir)/ || \ $(install_sh_DATA) $(srcdir)/html/Linux-PAM_ADG.html \ $(srcdir)/html/sag-*.html \ $(DESTDIR)$(htmldir)/ test -f Linux-PAM_ADG.txt || exit 0; \ $(install_sh_DATA) Linux-PAM_ADG.txt $(DESTDIR)$(docdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_ADG.txt \ $(DESTDIR)$(docdir)/ test -f Linux-PAM_ADG.pdf || exit 0; \ $(install_sh_DATA) Linux-PAM_ADG.pdf $(DESTDIR)$(pdfdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_ADG.pdf \ $(DESTDIR)$(pdfdir)/ uninstall-local: -rm $(DESTDIR)$(htmldir)/Linux-PAM_ADG.html -rm $(DESTDIR)$(htmldir)/adg-*.html -rm $(DESTDIR)$(docdir)/Linux-PAM_ADG.txt -rm $(DESTDIR)$(pdfdir)/Linux-PAM_ADG.pdf releasedocs: all $(mkinstalldirs) $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/html test -f html/Linux-PAM_ADG.html || exit 0; \ cp -ap html/Linux-PAM_ADG.html html/adg-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/html/ || \ cp -ap $(srcdir)/html/Linux-PAM_ADG.html \ $(srcdir)/html/adg-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/html/ test -f Linux-PAM_ADG.txt || exit 0; \ cp -p Linux-PAM_ADG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/ || \ cp -p $(srcdir)/Linux-PAM_ADG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/ test -f Linux-PAM_ADG.pdf || exit 0; \ cp -p Linux-PAM_ADG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/ || \ cp -p $(srcdir)/Linux-PAM_ADG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/adg/ # 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: Linux-PAM-1.1.8/doc/adg/pam_misc_paste_env.xml0000644000000000000000000000133712160065211015776 00000000000000
Transcribing an environment to that of PAM
Linux-PAM-1.1.8/doc/adg/pam_authenticate.xml0000644000000000000000000000166212160065211015456 00000000000000
Authenticating the user
Linux-PAM-1.1.8/doc/adg/Linux-PAM_ADG.xml0000644000000000000000000010552112160065211014327 00000000000000 The Linux-PAM Application Developers' Guide Andrew G. Morgan morgan@kernel.org Thorsten Kukuk kukuk@thkukuk.de Version 1.1.2, 31. August 2010 This manual documents what an application developer needs to know about the Linux-PAM library. It describes how an application might use the Linux-PAM library to authenticate users. In addition it contains a description of the functions to be found in libpam_misc library, that can be used in general applications. Finally, it contains some comments on PAM related security issues for the application developer. Introduction
Description Linux-PAM (Pluggable Authentication Modules for Linux) is a library that enables the local system administrator to choose how individual applications authenticate users. For an overview of the Linux-PAM library see the Linux-PAM System Administrators' Guide. It is the purpose of the Linux-PAM project to liberate the development of privilege granting software from the development of secure and appropriate authentication schemes. This is accomplished by providing a documented library of functions that an application may use for all forms of user authentication management. This library dynamically loads locally configured authentication modules that actually perform the authentication tasks. From the perspective of an application developer the information contained in the local configuration of the PAM library should not be important. Indeed it is intended that an application treat the functions documented here as a 'black box' that will deal with all aspects of user authentication. 'All aspects' includes user verification, account management, session initialization/termination and also the resetting of passwords (authentication tokens).
Synopsis For general applications that wish to use the services provided by Linux-PAM the following is a summary of the relevant linking information: #include <security/pam_appl.h> cc -o application .... -lpam In addition to libpam, there is a library of miscellaneous functions that make the job of writing PAM-aware applications easier (this library is not covered in the DCE-RFC for PAM and is specific to the Linux-PAM distribution): #include <security/pam_appl.h> #include <security/pam_misc.h> cc -o application .... -lpam -lpam_misc
Overview Most service-giving applications are restricted. In other words, their service is not available to all and every prospective client. Instead, the applying client must jump through a number of hoops to convince the serving application that they are authorized to obtain service. The process of authenticating a client is what PAM is designed to manage. In addition to authentication, PAM provides account management, credential management, session management and authentication-token (password changing) management services. It is important to realize when writing a PAM based application that these services are provided in a manner that is transparent to the application. That is to say, when the application is written, no assumptions can be made about how the client will be authenticated. The process of authentication is performed by the PAM library via a call to pam_authenticate(). The return value of this function will indicate whether a named client (the user) has been authenticated. If the PAM library needs to prompt the user for any information, such as their name or a password then it will do so. If the PAM library is configured to authenticate the user using some silent protocol, it will do this too. (This latter case might be via some hardware interface for example.) It is important to note that the application must leave all decisions about when to prompt the user at the discretion of the PAM library. The PAM library, however, must work equally well for different styles of application. Some applications, like the familiar login and passwd are terminal based applications, exchanges of information with the client in these cases is as plain text messages. Graphically based applications, however, have a more sophisticated interface. They generally interact with the user via specially constructed dialogue boxes. Additionally, network based services require that text messages exchanged with the client are specially formatted for automated processing: one such example is ftpd which prefixes each exchanged message with a numeric identifier. The presentation of simple requests to a client is thus something very dependent on the protocol that the serving application will use. In spite of the fact that PAM demands that it drives the whole authentication process, it is not possible to leave such protocol subtleties up to the PAM library. To overcome this potential problem, the application provides the PAM library with a conversation function. This function is called from within the PAM library and enables the PAM to directly interact with the client. The sorts of things that this conversation function must be able to do are prompt the user with text and/or obtain textual input from the user for processing by the PAM library. The details of this function are provided in a later section. For example, the conversation function may be called by the PAM library with a request to prompt the user for a password. Its job is to reformat the prompt request into a form that the client will understand. In the case of ftpd, this might involve prefixing the string with the number 331 and sending the request over the network to a connected client. The conversation function will then obtain any reply and, after extracting the typed password, will return this string of text to the PAM library. Similar concerns need to be addressed in the case of an X-based graphical server. There are a number of issues that need to be addressed when one is porting an existing application to become PAM compliant. A section below has been devoted to this: Porting legacy applications. Besides authentication, PAM provides other forms of management. Session management is provided with calls to pam_open_session() and pam_close_session(). What these functions actually do is up to the local administrator. But typically, they could be used to log entry and exit from the system or for mounting and unmounting the user's home directory. If an application provides continuous service for a period of time, it should probably call these functions, first open after the user is authenticated and then close when the service is terminated. Account management is another area that an application developer should include with a call to pam_acct_mgmt(). This call will perform checks on the good health of the user's account (has it expired etc.). One of the things this function may check is whether the user's authentication token has expired - in such a case the application may choose to attempt to update it with a call to pam_chauthtok(), although some applications are not suited to this task (ftp for example) and in this case the application should deny access to the user. PAM is also capable of setting and deleting the users credentials with the call pam_setcred(). This function should always be called after the user is authenticated and before service is offered to the user. By convention, this should be the last call to the PAM library before the PAM session is opened. What exactly a credential is, is not well defined. However, some examples are given in the glossary below. The public interface to <emphasis remap='B'>Linux-PAM</emphasis> Firstly, the relevant include file for the Linux-PAM library is <security/pam_appl.h>. It contains the definitions for a number of functions. After listing these functions, we collect some guiding remarks for programmers.
What can be expected by the application
What is expected of an application
Programming notes Note, all of the authentication service function calls accept the token PAM_SILENT, which instructs the modules to not send messages to the application. This token can be logically OR'd with any one of the permitted tokens specific to the individual function calls. PAM_SILENT does not override the prompting of the user for passwords etc., it only stops informative messages from being generated.
Security issues of <emphasis remap='B'>Linux-PAM</emphasis> PAM, from the perspective of an application, is a convenient API for authenticating users. PAM modules generally have no increased privilege over that possessed by the application that is making use of it. For this reason, the application must take ultimate responsibility for protecting the environment in which PAM operates. A poorly (or maliciously) written application can defeat any Linux-PAM module's authentication mechanisms by simply ignoring it's return values. It is the applications task and responsibility to grant privileges and access to services. The Linux-PAM library simply assumes the responsibility of authenticating the user; ascertaining that the user is who they say they are. Care should be taken to anticipate all of the documented behavior of the Linux-PAM library functions. A failure to do this will most certainly lead to a future security breach.
Care about standard library calls In general, writers of authorization-granting applications should assume that each module is likely to call any or all 'libc' functions. For 'libc' functions that return pointers to static/dynamically allocated structures (ie. the library allocates the memory and the user is not expected to 'free()' it) any module call to this function is likely to corrupt a pointer previously obtained by the application. The application programmer should either re-call such a 'libc' function after a call to the Linux-PAM library, or copy the structure contents to some safe area of memory before passing control to the Linux-PAM library. Two important function classes that fall into this category are getpwnam3 and syslog3 .
Choice of a service name When picking the service-name that corresponds to the first entry in the Linux-PAM configuration file, the application programmer should avoid the temptation of choosing something related to argv[0]. It is a trivial matter for any user to invoke any application on a system under a different name and this should not be permitted to cause a security breach. In general, this is always the right advice if the program is setuid, or otherwise more privileged than the user that invokes it. In some cases, avoiding this advice is convenient, but as an author of such an application, you should consider well the ways in which your program will be installed and used. (Its often the case that programs are not intended to be setuid, but end up being installed that way for convenience. If your program falls into this category, don't fall into the trap of making this mistake.) To invoke some target application by another name, the user may symbolically link the target application with the desired name. To be precise all the user need do is, ln -s /target/application ./preferred_name and then run ./preferred_name. By studying the Linux-PAM configuration file(s), an attacker can choose the preferred_name to be that of a service enjoying minimal protection; for example a game which uses Linux-PAM to restrict access to certain hours of the day. If the service-name were to be linked to the filename under which the service was invoked, it is clear that the user is effectively in the position of dictating which authentication scheme the service uses. Needless to say, this is not a secure situation. The conclusion is that the application developer should carefully define the service-name of an application. The safest thing is to make it a single hard-wired name.
The conversation function Care should be taken to ensure that the conv() function is robust. Such a function is provided in the library libpam_misc (see below).
The identity of the user The Linux-PAM modules will need to determine the identity of the user who requests a service, and the identity of the user who grants the service. These two users will seldom be the same. Indeed there is generally a third user identity to be considered, the new (assumed) identity of the user once the service is granted. The need for keeping tabs on these identities is clearly an issue of security. One convention that is actively used by some modules is that the identity of the user requesting a service should be the current UID (user ID) of the running process; the identity of the privilege granting user is the EUID (effective user ID) of the running process; the identity of the user, under whose name the service will be executed, is given by the contents of the PAM_USER pam_get_item3 . Note, modules can change the values of PAM_USER and PAM_RUSER during any of the pam_*() library calls. For this reason, the application should take care to use the pam_get_item() every time it wishes to establish who the authenticated user is (or will currently be). For network-serving databases and other applications that provide their own security model (independent of the OS kernel) the above scheme is insufficient to identify the requesting user. A more portable solution to storing the identity of the requesting user is to use the PAM_RUSER pam_get_item3 . The application should supply this value before attempting to authenticate the user with pam_authenticate(). How well this name can be trusted will ultimately be at the discretion of the local administrator (who configures PAM for your application) and a selected module may attempt to override the value where it can obtain more reliable data. If an application is unable to determine the identity of the requesting entity/user, it should not call pam_set_item3 to set PAM_RUSER. In addition to the PAM_RUSER item, the application should supply the PAM_RHOST (requesting host) item. As a general rule, the following convention for its value can be assumed: NULL = unknown; localhost = invoked directly from the local system; other.place.xyz = some component of the user's connection originates from this remote/requesting host. At present, PAM has no established convention for indicating whether the application supports a trusted path to communication from this host.
Sufficient resources Care should be taken to ensure that the proper execution of an application is not compromised by a lack of system resources. If an application is unable to open sufficient files to perform its service, it should fail gracefully, or request additional resources. Specifically, the quantities manipulated by the setrlimit2 family of commands should be taken into consideration. This is also true of conversation prompts. The application should not accept prompts of arbitrary length with out checking for resource allocation failure and dealing with such extreme conditions gracefully and in a manner that preserves the PAM API. Such tolerance may be especially important when attempting to track a malicious adversary.
A library of miscellaneous helper functions To aid the work of the application developer a library of miscellaneous functions is provided. It is called libpam_misc, and contains a text based conversation function, and routines for enhancing the standard PAM-environment variable support. The functions, structures and macros, made available by this library can be defined by including <security/pam_misc.h>. It should be noted that this library is specific to Linux-PAM and is not referred to in the defining DCE-RFC (see See also) below.
Functions supplied
Porting legacy applications The point of PAM is that the application is not supposed to have any idea how the attached authentication modules will choose to authenticate the user. So all they can do is provide a conversation function that will talk directly to the user(client) on the modules' behalf. Consider the case that you plug a retinal scanner into the login program. In this situation the user would be prompted: "please look into the scanner". No username or password would be needed - all this information could be deduced from the scan and a database lookup. The point is that the retinal scanner is an ideal task for a "module". While it is true that a pop-daemon program is designed with the POP protocol in mind and no-one ever considered attaching a retinal scanner to it, it is also the case that the "clean" PAM'ification of such a daemon would allow for the possibility of a scanner module being be attached to it. The point being that the "standard" pop-authentication protocol(s) [which will be needed to satisfy inflexible/legacy clients] would be supported by inserting an appropriate pam_qpopper module(s). However, having rewritten popd once in this way any new protocols can be implemented in-situ. One simple test of a ported application would be to insert the pam_permit module and see if the application demands you type a password... In such a case, xlock would fail to lock the terminal - or would at best be a screen-saver, ftp would give password free access to all etc.. Neither of these is a very secure thing to do, but they do illustrate how much flexibility PAM puts in the hands of the local admin. The key issue, in doing things correctly, is identifying what is part of the authentication procedure (how many passwords etc..) the exchange protocol (prefixes to prompts etc., numbers like 331 in the case of ftpd) and what is part of the service that the application delivers. PAM really needs to have total control in the authentication "procedure", the conversation function should only deal with reformatting user prompts and extracting responses from raw input. Glossary of PAM related terms The following are a list of terms used within this document. Authentication token Generally, this is a password. However, a user can authenticate him/herself in a variety of ways. Updating the user's authentication token thus corresponds to refreshing the object they use to authenticate themself with the system. The word password is avoided to keep open the possibility that the authentication involves a retinal scan or other non-textual mode of challenge/response. Credentials Having successfully authenticated the user, PAM is able to establish certain characteristics/attributes of the user. These are termed credentials. Examples of which are group memberships to perform privileged tasks with, and tickets in the form of environment variables etc. . Some user-credentials, such as the user's UID and GID (plus default group memberships) are not deemed to be PAM-credentials. It is the responsibility of the application to grant these directly. An example application To get a flavor of the way a Linux-PAM application is written we include the following example. It prompts the user for their password and indicates whether their account is valid on the standard output, its return code also indicates the success (0 for success; 1 for failure). #include #include static struct pam_conv conv = { misc_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; int retval; const char *user="nobody"; if(argc == 2) { user = argv[1]; } if(argc > 2) { fprintf(stderr, "Usage: check_user [username]\n"); exit(1); } retval = pam_start("check_user", user, &conv, &pamh); if (retval == PAM_SUCCESS) retval = pam_authenticate(pamh, 0); /* is user really user? */ if (retval == PAM_SUCCESS) retval = pam_acct_mgmt(pamh, 0); /* permitted access? */ /* This is where we have been authorized or not. */ if (retval == PAM_SUCCESS) { fprintf(stdout, "Authenticated\n"); } else { fprintf(stdout, "Not Authenticated\n"); } if (pam_end(pamh,retval) != PAM_SUCCESS) { /* close Linux-PAM */ pamh = NULL; fprintf(stderr, "check_user: failed to release authenticator\n"); exit(1); } return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */ } ]]> Files /usr/include/security/pam_appl.h Header file with interfaces for Linux-PAM applications. /usr/include/security/pam_misc.h Header file for useful library functions for making applications easier to write. See also The Linux-PAM System Administrators' Guide. The Linux-PAM Module Writers' Guide. The V. Samar and R. Schemers (SunSoft), ``UNIFIED LOGIN WITH PLUGGABLE AUTHENTICATION MODULES'', Open Software Foundation Request For Comments 86.0, October 1995. Author/acknowledgments This document was written by Andrew G. Morgan (morgan@kernel.org) with many contributions from Chris Adams, Peter Allgeyer, Tim Baverstock, Tim Berger, Craig S. Bell, Derrick J. Brashear, Ben Buxton, Seth Chaiklin, Oliver Crow, Chris Dent, Marc Ewing, Cristian Gafton, Emmanuel Galanos, Brad M. Garcia, Eric Hester, Roger Hu, Eric Jacksch, Michael K. Johnson, David Kinchlea, Olaf Kirch, Marcin Korzonek, Thorsten Kukuk, Stephen Langasek, Nicolai Langfeldt, Elliot Lee, Luke Kenneth Casson Leighton, Al Longyear, Ingo Luetkebohle, Marek Michalkiewicz, Robert Milkowski, Aleph One, Martin Pool, Sean Reifschneider, Jan Rekorajski, Erik Troan, Theodore Ts'o, Jeff Uphoff, Myles Uyema, Savochkin Andrey Vladimirovich, Ronald Wahl, David Wood, John Wilmes, Joseph S. D. Yao and Alex O. Yuriev. Thanks are also due to Sun Microsystems, especially to Vipin Samar and Charlie Lai for their advice. At an early stage in the development of Linux-PAM, Sun graciously made the documentation for their implementation of PAM available. This act greatly accelerated the development of Linux-PAM. Copyright information for this document Copyright (c) 2006 Thorsten Kukuk <kukuk@thkukuk.de> Copyright (c) 1996-2002 Andrew G. Morgan <morgan@kernel.org> 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 General Public License (GPL), in which case the provisions of the GNU GPL are required instead of the above restrictions. (This clause is necessary due to a potential bad interaction between the GNU 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
Linux-PAM-1.1.8/doc/index.html0000644000000000000000000000106112160065211012654 00000000000000 The Linux-PAM Administration and Developer Guides

The Linux-PAM Guides


Here is the documentation for Linux-PAM. As you will see it is currently not complete.


Linux-PAM-1.1.8/doc/sag/0000755000000000000000000000000012216542314011521 500000000000000Linux-PAM-1.1.8/doc/sag/pam_userdb.xml0000644000000000000000000000353612160065211014305 00000000000000
pam_userdb - authenticate against a db database
Linux-PAM-1.1.8/doc/sag/pam_exec.xml0000644000000000000000000000343212160065211013740 00000000000000
pam_exec - call an external command
Linux-PAM-1.1.8/doc/sag/pam_motd.xml0000644000000000000000000000342712160065211013763 00000000000000
pam_motd - display the motd file
Linux-PAM-1.1.8/doc/sag/pam_faildelay.xml0000644000000000000000000000367612160065211014760 00000000000000
pam_faildelay - change the delay on failure per-application
Linux-PAM-1.1.8/doc/sag/pam_succeed_if.xml0000644000000000000000000000371412160065211015110 00000000000000
pam_succeed_if - test account characteristics
Linux-PAM-1.1.8/doc/sag/pam_keyinit.xml0000644000000000000000000000356112160065211014473 00000000000000
pam_keyinit - display the keyinit file
Linux-PAM-1.1.8/doc/sag/pam_timestamp.xml0000644000000000000000000000465312160065211015025 00000000000000
pam_timestamp - authenticate using cached successful authentication attempts
Linux-PAM-1.1.8/doc/sag/pam_env.xml0000644000000000000000000000433412160065211013606 00000000000000
pam_env - set/unset environment variables
Linux-PAM-1.1.8/doc/sag/pam_securetty.xml0000644000000000000000000000366612160065211015054 00000000000000
pam_securetty - limit root login to special devices
Linux-PAM-1.1.8/doc/sag/pam_pwhistory.xml0000644000000000000000000000424312160065211015065 00000000000000
pam_pwhistory - grant access using .pwhistory file
Linux-PAM-1.1.8/doc/sag/pam_wheel.xml0000644000000000000000000000352012160065211014116 00000000000000
pam_wheel - only permit root access to members of group wheel
Linux-PAM-1.1.8/doc/sag/pam_xauth.xml0000644000000000000000000000347712160065211014156 00000000000000
pam_xauth - forward xauth keys between users
Linux-PAM-1.1.8/doc/sag/pam_umask.xml0000644000000000000000000000347612160065211014144 00000000000000
pam_umask - set the file mode creation mask
Linux-PAM-1.1.8/doc/sag/pam_listfile.xml0000644000000000000000000000364712160065211014637 00000000000000
pam_listfile - deny or allow services based on an arbitrary file
Linux-PAM-1.1.8/doc/sag/pam_rootok.xml0000644000000000000000000000352112160065211014330 00000000000000
pam_rootok - gain only root access
Linux-PAM-1.1.8/doc/sag/pam_nologin.xml0000644000000000000000000000357212160065211014466 00000000000000
pam_nologin - prevent non-root users from login
Linux-PAM-1.1.8/doc/sag/pam_warn.xml0000644000000000000000000000342412160065211013764 00000000000000
pam_warn - logs all PAM items
Linux-PAM-1.1.8/doc/sag/Linux-PAM_SAG.xml0000644000000000000000000006231712160065211014372 00000000000000 The Linux-PAM System Administrators' Guide Andrew G. Morgan morgan@kernel.org Thorsten Kukuk kukuk@thkukuk.de Version 1.1.2, 31. August 2010 This manual documents what a system-administrator needs to know about the Linux-PAM library. It covers the correct syntax of the PAM configuration file and discusses strategies for maintaining a secure system. Introduction Linux-PAM (Pluggable Authentication Modules for Linux) is a suite of shared libraries that enable the local system administrator to choose how applications authenticate users. In other words, without (rewriting and) recompiling a PAM-aware application, it is possible to switch between the authentication mechanism(s) it uses. Indeed, one may entirely upgrade the local authentication system without touching the applications themselves. Historically an application that has required a given user to be authenticated, has had to be compiled to use a specific authentication mechanism. For example, in the case of traditional UN*X systems, the identity of the user is verified by the user entering a correct password. This password, after being prefixed by a two character ``salt'', is encrypted (with crypt(3)). The user is then authenticated if this encrypted password is identical to the second field of the user's entry in the system password database (the /etc/passwd file). On such systems, most if not all forms of privileges are granted based on this single authentication scheme. Privilege comes in the form of a personal user-identifier (UID) and membership of various groups. Services and applications are available based on the personal and group identity of the user. Traditionally, group membership has been assigned based on entries in the /etc/group file. It is the purpose of the Linux-PAM project to separate the development of privilege granting software from the development of secure and appropriate authentication schemes. This is accomplished by providing a library of functions that an application may use to request that a user be authenticated. This PAM library is configured locally with a system file, /etc/pam.conf (or a series of configuration files located in /etc/pam.d/) to authenticate a user request via the locally available authentication modules. The modules themselves will usually be located in the directory /lib/security or /lib64/security and take the form of dynamically loadable object files (see dlopen3 ). Some comments on the text Before proceeding to read the rest of this document, it should be noted that the text assumes that certain files are placed in certain directories. Where they have been specified, the conventions we adopt here for locating these files are those of the relevant RFC (RFC-86.0, see bibliography"). If you are using a distribution of Linux (or some other operating system) that supports PAM but chooses to distribute these files in a different way you should be careful when copying examples directly from the text. As an example of the above, where it is explicit, the text assumes that PAM loadable object files (the modules) are to be located in the following directory: /lib/security/ or /lib64/security depending on the architecture. This is generally the location that seems to be compatible with the Filesystem Hierarchy Standard (FHS). On Solaris, which has its own licensed version of PAM, and some other implementations of UN*X, these files can be found in /usr/lib/security. Please be careful to perform the necessary transcription when using the examples from the text. Overview For the uninitiated, we begin by considering an example. We take an application that grants some service to users; login is one such program. Login does two things, it first establishes that the requesting user is whom they claim to be and second provides them with the requested service: in the case of login the service is a command shell (bash, tcsh, zsh, etc.) running with the identity of the user. Traditionally, the former step is achieved by the login application prompting the user for a password and then verifying that it agrees with that located on the system; hence verifying that as far as the system is concerned the user is who they claim to be. This is the task that is delegated to Linux-PAM. From the perspective of the application programmer (in this case the person that wrote the login application), Linux-PAM takes care of this authentication task -- verifying the identity of the user. The flexibility of Linux-PAM is that you, the system administrator, have the freedom to stipulate which authentication scheme is to be used. You have the freedom to set the scheme for any/all PAM-aware applications on your Linux system. That is, you can authenticate from anything as naive as simple trust (pam_permit) to something as paranoid as a combination of a retinal scan, a voice print and a one-time password! To illustrate the flexibility you face, consider the following situation: a system administrator (parent) wishes to improve the mathematical ability of her users (children). She can configure their favorite ``Shoot 'em up game'' (PAM-aware of course) to authenticate them with a request for the product of a couple of random numbers less than 12. It is clear that if the game is any good they will soon learn their multiplication tables. As they mature, the authentication can be upgraded to include (long) division! Linux-PAM deals with four separate types of (management) task. These are: authentication management; account management; session management; and password management. The association of the preferred management scheme with the behavior of an application is made with entries in the relevant Linux-PAM configuration file. The management functions are performed by modules specified in the configuration file. The syntax for this file is discussed in the section below. Here is a figure that describes the overall organization of Linux-PAM: +----------------+ | application: X | +----------------+ / +----------+ +================+ | authentication-[---->--\--] Linux- |--<--| PAM config file| | + [----<--/--] PAM | |================| |[conversation()][--+ \ | | | X auth .. a.so | +----------------+ | / +-n--n-----+ | X auth .. b.so | | | | __| | | _____/ | service user | A | | |____,-----' | | | V A +----------------+ +------|-----|---------+ -----+------+ +---u-----u----+ | | | | auth.... |--[ a ]--[ b ]--[ c ] +--------------+ | acct.... |--[ b ]--[ d ] +--------------+ | password |--[ b ]--[ c ] +--------------+ | session |--[ e ]--[ c ] +--------------+ By way of explanation, the left of the figure represents the application; application X. Such an application interfaces with the Linux-PAM library and knows none of the specifics of its configured authentication method. The Linux-PAM library (in the center) consults the contents of the PAM configuration file and loads the modules that are appropriate for application-X. These modules fall into one of four management groups (lower-center) and are stacked in the order they appear in the configuration file. These modules, when called by Linux-PAM, perform the various authentication tasks for the application. Textual information, required from/or offered to the user, can be exchanged through the use of the application-supplied conversation function. If a program is going to use PAM, then it has to have PAM functions explicitly coded into the program. If you have access to the source code you can add the appropriate PAM functions. If you do not have access to the source code, and the binary does not have the PAM functions included, then it is not possible to use PAM. The Linux-PAM configuration file
Configuration file syntax
Directory based configuration
Example configuration file entries In this section, we give some examples of entries that can be present in the Linux-PAM configuration file. As a first attempt at configuring your system you could do worse than to implement these. If a system is to be considered secure, it had better have a reasonably secure 'other entry. The following is a paranoid setting (which is not a bad place to start!): # # default; deny access # other auth required pam_deny.so other account required pam_deny.so other password required pam_deny.so other session required pam_deny.so Whilst fundamentally a secure default, this is not very sympathetic to a misconfigured system. For example, such a system is vulnerable to locking everyone out should the rest of the file become badly written. The module pam_deny (documented in a later section) is not very sophisticated. For example, it logs no information when it is invoked so unless the users of a system contact the administrator when failing to execute a service application, the administrator may go for a long while in ignorance of the fact that his system is misconfigured. The addition of the following line before those in the above example would provide a suitable warning to the administrator. # # default; wake up! This application is not configured # other auth required pam_warn.so other password required pam_warn.so Having two 'other auth' lines is an example of stacking. On a system that uses the /etc/pam.d/ configuration, the corresponding default setup would be achieved with the following file: # # default configuration: /etc/pam.d/other # auth required pam_warn.so auth required pam_deny.so account required pam_deny.so password required pam_warn.so password required pam_deny.so session required pam_deny.so This is the only explicit example we give for an /etc/pam.d/ file. In general, it should be clear how to transpose the remaining examples to this configuration scheme. On a less sensitive computer, one on which the system administrator wishes to remain ignorant of much of the power of Linux-PAM, the following selection of lines (in /etc/pam.d/other) is likely to mimic the historically familiar Linux setup. # # default; standard UN*X access # auth required pam_unix.so account required pam_unix.so password required pam_unix.so session required pam_unix.so In general this will provide a starting place for most applications.
Security issues
If something goes wrong Linux-PAM has the potential to seriously change the security of your system. You can choose to have no security or absolute security (no access permitted). In general, Linux-PAM errs towards the latter. Any number of configuration errors can disable access to your system partially, or completely. The most dramatic problem that is likely to be encountered when configuring Linux-PAM is that of deleting the configuration file(s): /etc/pam.d/* and/or /etc/pam.conf. This will lock you out of your own system! To recover, your best bet is to restore the system from a backup or boot the system into a rescue system and correct things from there.
Avoid having a weak `other' configuration It is not a good thing to have a weak default (other) entry. This service is the default configuration for all PAM aware applications and if it is weak, your system is likely to be vulnerable to attack. Here is a sample "other" configuration file. The pam_deny module will deny access and the pam_warn module will send a syslog message to auth.notice: # # The PAM configuration file for the `other' service # auth required pam_deny.so auth required pam_warn.so account required pam_deny.so account required pam_warn.so password required pam_deny.so password required pam_warn.so session required pam_deny.so session required pam_warn.so
A reference guide for available modules Here, we collect together the descriptions of the various modules coming with Linux-PAM. See also The Linux-PAM Application Writers' Guide. The Linux-PAM Module Writers' Guide. The V. Samar and R. Schemers (SunSoft), ``UNIFIED LOGIN WITH PLUGGABLE AUTHENTICATION MODULES'', Open Software Foundation Request For Comments 86.0, October 1995. Author/acknowledgments This document was written by Andrew G. Morgan (morgan@kernel.org) with many contributions from Chris Adams, Peter Allgeyer, Tim Baverstock, Tim Berger, Craig S. Bell, Derrick J. Brashear, Ben Buxton, Seth Chaiklin, Oliver Crow, Chris Dent, Marc Ewing, Cristian Gafton, Emmanuel Galanos, Brad M. Garcia, Eric Hester, Michel D'Hooge, Roger Hu, Eric Jacksch, Michael K. Johnson, David Kinchlea, Olaf Kirch, Marcin Korzonek, Thorsten Kukuk, Stephen Langasek, Nicolai Langfeldt, Elliot Lee, Luke Kenneth Casson Leighton, Al Longyear, Ingo Luetkebohle, Marek Michalkiewicz, Robert Milkowski, Aleph One, Martin Pool, Sean Reifschneider, Jan Rekorajski, Erik Troan, Theodore Ts'o, Jeff Uphoff, Myles Uyema, Savochkin Andrey Vladimirovich, Ronald Wahl, David Wood, John Wilmes, Joseph S. D. Yao and Alex O. Yuriev. Thanks are also due to Sun Microsystems, especially to Vipin Samar and Charlie Lai for their advice. At an early stage in the development of Linux-PAM, Sun graciously made the documentation for their implementation of PAM available. This act greatly accelerated the development of Linux-PAM. Copyright information for this document Copyright (c) 2006 Thorsten Kukuk <kukuk@thkukuk.de> Copyright (c) 1996-2002 Andrew G. Morgan <morgan@kernel.org> 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 General Public License (GPL), in which case the provisions of the GNU GPL are required instead of the above restrictions. (This clause is necessary due to a potential bad interaction between the GNU 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
Linux-PAM-1.1.8/doc/sag/pam_permit.xml0000644000000000000000000000352212160065211014314 00000000000000
pam_permit - the promiscuous module
Linux-PAM-1.1.8/doc/sag/Makefile.am0000644000000000000000000000722012160065211013470 00000000000000# # Copyright (c) 2006 Thorsten Kukuk # CLEANFILES = Linux-PAM_SAG.fo *~ EXTRA_DIST = $(XMLS) XMLS = Linux-PAM_SAG.xml $(shell ls $(srcdir)/pam_*.xml) DEP_XMLS = $(shell ls $(top_srcdir)/modules/pam_*/pam_*.xml) if ENABLE_REGENERATE_MAN MAINTAINERCLEANFILES = Linux-PAM_SAG.txt Linux-PAM_SAG.pdf html/*.html all: Linux-PAM_SAG.txt html/Linux-PAM_SAG.html Linux-PAM_SAG.pdf Linux-PAM_SAG.pdf: $(XMLS) $(DEP_XMLS) if ENABLE_GENERATE_PDF $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< $(XSLTPROC) --stringparam generate.toc "book toc" \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 2 --xinclude --nonet \ http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_SAG.fo $(FO2PDF) Linux-PAM_SAG.fo $@ else echo "No fo2pdf processor installed, skip PDF generation" endif Linux-PAM_SAG.txt: $(XMLS) $(DEP_XMLS) $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< $(XSLTPROC) --stringparam generate.toc "book toc" \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 2 --xinclude --nonet \ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@ html/Linux-PAM_SAG.html: $(XMLS) $(DEP_XMLS) @test -d html || mkdir -p html $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< $(XSLTPROC) --stringparam base.dir html/ \ --stringparam root.filename Linux-PAM_SAG \ --stringparam use.id.as.filename 1 \ --stringparam chunk.first.sections 1 \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 2 --xinclude --nonet \ --stringparam chunker.output.encoding UTF-8 \ http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $< distclean-local: -rm -rf html Linux-PAM_SAG.txt Linux-PAM_SAG.pdf endif install-data-local: $(mkinstalldirs) $(DESTDIR)$(docdir) $(mkinstalldirs) $(DESTDIR)$(pdfdir) $(mkinstalldirs) $(DESTDIR)$(htmldir) test -f html/Linux-PAM_SAG.html || exit 0; \ $(install_sh_DATA) html/Linux-PAM_SAG.html html/sag-*.html \ $(DESTDIR)$(htmldir)/ || \ $(install_sh_DATA) $(srcdir)/html/Linux-PAM_SAG.html \ $(srcdir)/html/sag-*.html \ $(DESTDIR)$(htmldir)/ test -f Linux-PAM_SAG.txt || exit 0; \ $(install_sh_DATA) Linux-PAM_SAG.txt $(DESTDIR)$(docdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_SAG.txt \ $(DESTDIR)$(docdir)/ test -f Linux-PAM_SAG.pdf || exit 0; \ $(install_sh_DATA) Linux-PAM_SAG.pdf $(DESTDIR)$(pdfdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_SAG.pdf \ $(DESTDIR)$(pdfdir)/ uninstall-local: -rm $(DESTDIR)$(htmldir)/Linux-PAM_SAG.html -rm $(DESTDIR)$(htmldir)/sag-*.html -rm $(DESTDIR)$(docdir)/Linux-PAM_SAG.txt -rm $(DESTDIR)$(pdfdir)/Linux-PAM_SAG.pdf releasedocs: all $(mkinstalldirs) $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/html test -f html/Linux-PAM_SAG.html || exit 0; \ cp -ap html/Linux-PAM_SAG.html html/sag-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/html/ || \ cp -ap $(srcdir)/html/Linux-PAM_SAG.html \ $(srcdir)/html/sag-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/html/ test -f Linux-PAM_SAG.txt || exit 0; \ cp -p Linux-PAM_SAG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/ || \ cp -p $(srcdir)/Linux-PAM_SAG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/ test -f Linux-PAM_SAG.pdf || exit 0; \ cp -p Linux-PAM_SAG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/ || \ cp -p $(srcdir)/Linux-PAM_SAG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/ Linux-PAM-1.1.8/doc/sag/pam_tally2.xml0000644000000000000000000000477212160065211014233 00000000000000
pam_tally2 - login counter (tallying) module
Linux-PAM-1.1.8/doc/sag/pam_access.xml0000644000000000000000000000447012160065211014260 00000000000000
pam_access - logdaemon style login access control
Linux-PAM-1.1.8/doc/sag/pam_mkhomedir.xml0000644000000000000000000000365612160065211015003 00000000000000
pam_mkhomedir - create users home directory
Linux-PAM-1.1.8/doc/sag/pam_limits.xml0000644000000000000000000000444312160065211014320 00000000000000
pam_limits - limit resources
Linux-PAM-1.1.8/doc/sag/pam_time.xml0000644000000000000000000000433712160065211013757 00000000000000
pam_time - time controled access
Linux-PAM-1.1.8/doc/sag/pam_mail.xml0000644000000000000000000000343512160065211013741 00000000000000
pam_mail - inform about available mail
Linux-PAM-1.1.8/doc/sag/pam_deny.xml0000644000000000000000000000343012160065211013751 00000000000000
pam_deny - locking-out PAM module
Linux-PAM-1.1.8/doc/sag/pam_group.xml0000644000000000000000000000441412160065211014151 00000000000000
pam_group - module to modify group access
Linux-PAM-1.1.8/doc/sag/pam_echo.xml0000644000000000000000000000342512160065211013734 00000000000000
pam_echo - print text messages
Linux-PAM-1.1.8/doc/sag/pam_namespace.xml0000644000000000000000000000463412160065211014755 00000000000000
pam_namespace - setup a private namespace
Linux-PAM-1.1.8/doc/sag/pam_sepermit.xml0000644000000000000000000000421112160065211014640 00000000000000
pam_sepermit - allow/reject access based on SELinux mode
Linux-PAM-1.1.8/doc/sag/pam_rhosts.xml0000644000000000000000000000353312160065211014340 00000000000000
pam_rhosts - grant access using .rhosts file
Linux-PAM-1.1.8/doc/sag/pam_filter.xml0000644000000000000000000000351112160065211014277 00000000000000
pam_filter - filter module
Linux-PAM-1.1.8/doc/sag/pam_localuser.xml0000644000000000000000000000367412160065211015015 00000000000000
pam_localuser - require users to be listed in /etc/passwd
Linux-PAM-1.1.8/doc/sag/Makefile.in0000644000000000000000000004016312216527535013522 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2006 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/sag DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = Linux-PAM_SAG.fo *~ EXTRA_DIST = $(XMLS) XMLS = Linux-PAM_SAG.xml $(shell ls $(srcdir)/pam_*.xml) DEP_XMLS = $(shell ls $(top_srcdir)/modules/pam_*/pam_*.xml) @ENABLE_REGENERATE_MAN_TRUE@MAINTAINERCLEANFILES = Linux-PAM_SAG.txt Linux-PAM_SAG.pdf html/*.html 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 ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/sag/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/sag/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) @ENABLE_REGENERATE_MAN_FALSE@distclean-local: clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distclean-local \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ 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 uninstall-local @ENABLE_REGENERATE_MAN_TRUE@all: Linux-PAM_SAG.txt html/Linux-PAM_SAG.html Linux-PAM_SAG.pdf @ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_SAG.pdf: $(XMLS) $(DEP_XMLS) @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 2 --xinclude --nonet \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_SAG.fo @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(FO2PDF) Linux-PAM_SAG.fo $@ @ENABLE_GENERATE_PDF_FALSE@@ENABLE_REGENERATE_MAN_TRUE@ echo "No fo2pdf processor installed, skip PDF generation" @ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_SAG.txt: $(XMLS) $(DEP_XMLS) @ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< @ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 2 --xinclude --nonet \ @ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@ @ENABLE_REGENERATE_MAN_TRUE@html/Linux-PAM_SAG.html: $(XMLS) $(DEP_XMLS) @ENABLE_REGENERATE_MAN_TRUE@ @test -d html || mkdir -p html @ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< @ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam base.dir html/ \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam root.filename Linux-PAM_SAG \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam use.id.as.filename 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam chunk.first.sections 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 2 --xinclude --nonet \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam chunker.output.encoding UTF-8 \ @ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $< @ENABLE_REGENERATE_MAN_TRUE@distclean-local: @ENABLE_REGENERATE_MAN_TRUE@ -rm -rf html Linux-PAM_SAG.txt Linux-PAM_SAG.pdf install-data-local: $(mkinstalldirs) $(DESTDIR)$(docdir) $(mkinstalldirs) $(DESTDIR)$(pdfdir) $(mkinstalldirs) $(DESTDIR)$(htmldir) test -f html/Linux-PAM_SAG.html || exit 0; \ $(install_sh_DATA) html/Linux-PAM_SAG.html html/sag-*.html \ $(DESTDIR)$(htmldir)/ || \ $(install_sh_DATA) $(srcdir)/html/Linux-PAM_SAG.html \ $(srcdir)/html/sag-*.html \ $(DESTDIR)$(htmldir)/ test -f Linux-PAM_SAG.txt || exit 0; \ $(install_sh_DATA) Linux-PAM_SAG.txt $(DESTDIR)$(docdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_SAG.txt \ $(DESTDIR)$(docdir)/ test -f Linux-PAM_SAG.pdf || exit 0; \ $(install_sh_DATA) Linux-PAM_SAG.pdf $(DESTDIR)$(pdfdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_SAG.pdf \ $(DESTDIR)$(pdfdir)/ uninstall-local: -rm $(DESTDIR)$(htmldir)/Linux-PAM_SAG.html -rm $(DESTDIR)$(htmldir)/sag-*.html -rm $(DESTDIR)$(docdir)/Linux-PAM_SAG.txt -rm $(DESTDIR)$(pdfdir)/Linux-PAM_SAG.pdf releasedocs: all $(mkinstalldirs) $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/html test -f html/Linux-PAM_SAG.html || exit 0; \ cp -ap html/Linux-PAM_SAG.html html/sag-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/html/ || \ cp -ap $(srcdir)/html/Linux-PAM_SAG.html \ $(srcdir)/html/sag-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/html/ test -f Linux-PAM_SAG.txt || exit 0; \ cp -p Linux-PAM_SAG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/ || \ cp -p $(srcdir)/Linux-PAM_SAG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/ test -f Linux-PAM_SAG.pdf || exit 0; \ cp -p Linux-PAM_SAG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/ || \ cp -p $(srcdir)/Linux-PAM_SAG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/sag/ # 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: Linux-PAM-1.1.8/doc/sag/pam_ftp.xml0000644000000000000000000000340012160065211013600 00000000000000
pam_ftp - module for anonymous access
Linux-PAM-1.1.8/doc/sag/pam_issue.xml0000644000000000000000000000347412160065211014152 00000000000000
pam_issue - add issue file to user prompt
Linux-PAM-1.1.8/doc/sag/pam_debug.xml0000644000000000000000000000346212160065211014105 00000000000000
pam_debug - debug the PAM stack
Linux-PAM-1.1.8/doc/sag/pam_loginuid.xml0000644000000000000000000000364612160065211014635 00000000000000
pam_loginuid - record user's login uid to the process attribute
Linux-PAM-1.1.8/doc/sag/pam_tty_audit.xml0000644000000000000000000000423412160065211015023 00000000000000
pam_tty_audit - enable/disable tty auditing
Linux-PAM-1.1.8/doc/sag/pam_unix.xml0000644000000000000000000000344512160065211014003 00000000000000
pam_unix - traditional password authentication
Linux-PAM-1.1.8/doc/sag/pam_cracklib.xml0000644000000000000000000000364212160065211014571 00000000000000
pam_cracklib - checks the password against dictionary words
Linux-PAM-1.1.8/doc/sag/pam_lastlog.xml0000644000000000000000000000356312160065211014466 00000000000000
pam_lastlog - display date of last login
Linux-PAM-1.1.8/doc/sag/pam_selinux.xml0000644000000000000000000000357112160065211014507 00000000000000
pam_selinux - set the default security context
Linux-PAM-1.1.8/doc/sag/pam_tally.xml0000644000000000000000000000402612160065211014141 00000000000000
pam_tally - login counter (tallying) module
Linux-PAM-1.1.8/doc/sag/pam_shells.xml0000644000000000000000000000352712160065211014313 00000000000000
pam_shells - check for valid login shell
Linux-PAM-1.1.8/doc/man/0000755000000000000000000000000012216542314011522 500000000000000Linux-PAM-1.1.8/doc/man/pam_sm_open_session.3.xml0000644000000000000000000000633312160065211016364 00000000000000 pam_sm_open_session 3 Linux-PAM Manual pam_sm_open_session PAM service function to start session management #define PAM_SM_SESSION #include <security/pam_modules.h> PAM_EXTERN int pam_sm_open_session pam_handle_t *pamh int flags int argc const char **argv DESCRIPTION The pam_sm_open_session function is the service module's implementation of the pam_open_session3 interface. This function is called to commence a session. The only valid value for flags is zero or: PAM_SILENT Do not emit any messages. RETURN VALUES PAM_SESSION_ERR Cannot make/remove an entry for the specified session. PAM_SUCCESS The session was successfully started. SEE ALSO pam3 , pam_open_session3 , pam_sm_close_session3 , pam_strerror3 , PAM8 Linux-PAM-1.1.8/doc/man/pam_sm_acct_mgmt.3.xml0000644000000000000000000001174712160065211015623 00000000000000 pam_sm_acct_mgmt 3 Linux-PAM Manual pam_sm_acct_mgmt PAM service function for account management #define PAM_SM_ACCOUNT #include <security/pam_modules.h> PAM_EXTERN int pam_sm_acct_mgmt pam_handle_t *pamh int flags int argc const char **argv DESCRIPTION The pam_sm_acct_mgmt function is the service module's implementation of the pam_acct_mgmt3 interface. This function performs the task of establishing whether the user is permitted to gain access at this time. It should be understood that the user has previously been validated by an authentication module. This function checks for other things. Such things might be: the time of day or the date, the terminal line, remote hostname, etc. This function may also determine things like the expiration on passwords, and respond that the user change it before continuing. Valid flags, which may be logically OR'd with PAM_SILENT, are: PAM_SILENT Do not emit any messages. PAM_DISALLOW_NULL_AUTHTOK Return PAM_AUTH_ERR if the database of authentication tokens for this authentication mechanism has a NULL entry for the user. RETURN VALUES PAM_ACCT_EXPIRED User account has expired. PAM_AUTH_ERR Authentication failure. PAM_NEW_AUTHTOK_REQD The user's authentication token has expired. Before calling this function again the application will arrange for a new one to be given. This will likely result in a call to pam_sm_chauthtok(). PAM_PERM_DENIED Permission denied. PAM_SUCCESS The authentication token was successfully updated. PAM_USER_UNKNOWN User unknown to password service. SEE ALSO pam3 , pam_acct_mgmt3 , pam_sm_chauthtok3 , pam_strerror3 , PAM8 Linux-PAM-1.1.8/doc/man/pam.d.50000644000000000000000000000001712216527622012532 00000000000000.so pam.conf.5 Linux-PAM-1.1.8/doc/man/pam_sm_authenticate.30000644000000000000000000000601712216527630015550 00000000000000'\" t .\" Title: pam_sm_authenticate .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SM_AUTHENTICATE" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_sm_authenticate \- PAM service function for user authentication .SH "SYNOPSIS" .sp .ft B .nf #define PAM_SM_AUTH .fi .ft .sp .ft B .nf #include .fi .ft .HP \w'PAM_EXTERN\ int\ pam_sm_authenticate('u .BI "PAM_EXTERN int pam_sm_authenticate(pam_handle_t\ *" "pamh" ", int\ " "flags" ", int\ " "argc" ", const\ char\ **" "argv" ");" .SH "DESCRIPTION" .PP The \fBpam_sm_authenticate\fR function is the service module\*(Aqs implementation of the \fBpam_authenticate\fR(3) interface\&. .PP This function performs the task of authenticating the user\&. .PP Valid flags, which may be logically OR\*(Aqd with \fIPAM_SILENT\fR, are: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .PP PAM_DISALLOW_NULL_AUTHTOK .RS 4 Return \fBPAM_AUTH_ERR\fR if the database of authentication tokens for this authentication mechanism has a \fINULL\fR entry for the user\&. Without this flag, such a \fINULL\fR token will lead to a success without the user being prompted\&. .RE .SH "RETURN VALUES" .PP PAM_AUTH_ERR .RS 4 Authentication failure\&. .RE .PP PAM_CRED_INSUFFICIENT .RS 4 For some reason the application does not have sufficient credentials to authenticate the user\&. .RE .PP PAM_AUTHINFO_UNAVAIL .RS 4 The modules were not able to access the authentication information\&. This might be due to a network or hardware failure etc\&. .RE .PP PAM_SUCCESS .RS 4 The authentication token was successfully updated\&. .RE .PP PAM_USER_UNKNOWN .RS 4 The supplied username is not known to the authentication service\&. .RE .PP PAM_MAXTRIES .RS 4 One or more of the authentication modules has reached its limit of tries authenticating the user\&. Do not try again\&. .RE .SH "SEE ALSO" .PP \fBpam\fR(3), \fBpam_authenticate\fR(3), \fBpam_sm_setcred\fR(3), \fBpam_strerror\fR(3), \fBPAM\fR(8) Linux-PAM-1.1.8/doc/man/pam_acct_mgmt.30000644000000000000000000000567412216527622014342 00000000000000'\" t .\" Title: pam_acct_mgmt .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_ACCT_MGMT" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_acct_mgmt \- PAM account validation management .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_acct_mgmt('u .BI "int pam_acct_mgmt(pam_handle_t\ *" "pamh" ", int\ " "flags" ");" .SH "DESCRIPTION" .PP The \fBpam_acct_mgmt\fR function is used to determine if the users account is valid\&. It checks for authentication token and account expiration and verifies access restrictions\&. It is typically called after the user has been authenticated\&. .PP The \fIpamh\fR argument is an authentication handle obtained by a prior call to pam_start()\&. The flags argument is the binary or of zero or more of the following values: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .PP PAM_DISALLOW_NULL_AUTHTOK .RS 4 The PAM module service should return PAM_NEW_AUTHTOK_REQD if the user has a null authentication token\&. .RE .SH "RETURN VALUES" .PP PAM_ACCT_EXPIRED .RS 4 User account has expired\&. .RE .PP PAM_AUTH_ERR .RS 4 Authentication failure\&. .RE .PP PAM_NEW_AUTHTOK_REQD .RS 4 The user account is valid but their authentication token is \fIexpired\fR\&. The correct response to this return\-value is to require that the user satisfies the \fBpam_chauthtok()\fR function before obtaining service\&. It may not be possible for some applications to do this\&. In such cases, the user should be denied access until such time as they can update their password\&. .RE .PP PAM_PERM_DENIED .RS 4 Permission denied\&. .RE .PP PAM_SUCCESS .RS 4 The authentication token was successfully updated\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User unknown to password service\&. .RE .SH "SEE ALSO" .PP \fBpam_start\fR(3), \fBpam_authenticate\fR(3), \fBpam_chauthtok\fR(3), \fBpam_strerror\fR(3), \fBpam\fR(8) Linux-PAM-1.1.8/doc/man/pam_get_authtok_noverify.30000644000000000000000000000002612216527624016627 00000000000000.so pam_get_authtok.3 Linux-PAM-1.1.8/doc/man/pam_conv.30000644000000000000000000001331612216527623013342 00000000000000'\" t .\" Title: pam_conv .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_CONV" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_conv \- PAM conversation function .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .sp .nf struct pam_message { int msg_style; const char *msg; }; struct pam_response { char *resp; int resp_retcode; }; struct pam_conv { int (*conv)(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr); void *appdata_ptr; }; .fi .SH "DESCRIPTION" .PP The PAM library uses an application\-defined callback to allow a direct communication between a loaded module and the application\&. This callback is specified by the \fIstruct pam_conv\fR passed to \fBpam_start\fR(3) at the start of the transaction\&. .PP When a module calls the referenced conv() function, the argument \fIappdata_ptr\fR is set to the second element of this structure\&. .PP The other arguments of a call to conv() concern the information exchanged by module and application\&. That is to say, \fInum_msg\fR holds the length of the array of pointers, \fImsg\fR\&. After a successful return, the pointer \fIresp\fR points to an array of pam_response structures, holding the application supplied text\&. The \fIresp_retcode\fR member of this struct is unused and should be set to zero\&. It is the caller\*(Aqs responsibility to release both, this array and the responses themselves, using \fBfree\fR(3)\&. Note, \fI*resp\fR is a \fIstruct pam_response\fR array and not an array of pointers\&. .PP The number of responses is always equal to the \fInum_msg\fR conversation function argument\&. This does require that the response array is \fBfree\fR(3)\*(Aqd after every call to the conversation function\&. The index of the responses corresponds directly to the prompt index in the pam_message array\&. .PP On failure, the conversation function should release any resources it has allocated, and return one of the predefined PAM error codes\&. .PP Each message can have one of four types, specified by the \fImsg_style\fR member of \fIstruct pam_message\fR: .PP PAM_PROMPT_ECHO_OFF .RS 4 Obtain a string without echoing any text\&. .RE .PP PAM_PROMPT_ECHO_ON .RS 4 Obtain a string whilst echoing text\&. .RE .PP PAM_ERROR_MSG .RS 4 Display an error message\&. .RE .PP PAM_TEXT_INFO .RS 4 Display some text\&. .RE .PP The point of having an array of messages is that it becomes possible to pass a number of things to the application in a single call from the module\&. It can also be convenient for the application that related things come at once: a windows based application can then present a single form with many messages/prompts on at once\&. .PP In passing, it is worth noting that there is a descrepency between the way Linux\-PAM handles the const struct pam_message **msg conversation function argument from the way that Solaris\*(Aq PAM (and derivitives, known to include HP/UX, are there others?) does\&. Linux\-PAM interprets the msg argument as entirely equivalent to the following prototype const struct pam_message *msg[] (which, in spirit, is consistent with the commonly used prototypes for argv argument to the familiar main() function: char **argv; and char *argv[])\&. Said another way Linux\-PAM interprets the msg argument as a pointer to an array of num_msg read only \*(Aqstruct pam_message\*(Aq pointers\&. Solaris\*(Aq PAM implementation interprets this argument as a pointer to a pointer to an array of num_msg pam_message structures\&. Fortunately, perhaps, for most module/application developers when num_msg has a value of one these two definitions are entirely equivalent\&. Unfortunately, casually raising this number to two has led to unanticipated compatibility problems\&. .PP For what its worth the two known module writer work\-arounds for trying to maintain source level compatibility with both PAM implementations are: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} never call the conversation function with num_msg greater than one\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} set up msg as doubly referenced so both types of conversation function can find the messages\&. That is, make .sp .if n \{\ .RS 4 .\} .nf msg[n] = & (( *msg )[n]) .fi .if n \{\ .RE .\} .RE .SH "RETURN VALUES" .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_CONV_ERR .RS 4 Conversation failure\&. The application should not set \fI*resp\fR\&. .RE .PP PAM_SUCCESS .RS 4 Success\&. .RE .SH "SEE ALSO" .PP \fBpam_start\fR(3), \fBpam_set_item\fR(3), \fBpam_get_item\fR(3), \fBpam_strerror\fR(3), \fBpam\fR(8) Linux-PAM-1.1.8/doc/man/pam_misc_setenv.30000644000000000000000000000417012216527632014712 00000000000000'\" t .\" Title: pam_misc_setenv .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_MISC_SETENV" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_misc_setenv \- BSD like PAM environment variable setting .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_misc_setenv('u .BI "int pam_misc_setenv(pam_handle_t\ *" "pamh" ", const\ char\ *" "name" ", const\ char\ *" "value" ", int" "readonly" ");" .SH "DESCRIPTION" .PP This function performs a task equivalent to \fBpam_putenv\fR(3), its syntax is, however, more like the BSD style function; \fBsetenv()\fR\&. The \fIname\fR and \fIvalue\fR are concatenated with an \*(Aq=\*(Aq to form a name=value and passed to \fBpam_putenv()\fR\&. If, however, the PAM variable is already set, the replacement will only be applied if the last argument, \fIreadonly\fR, is zero\&. .SH "SEE ALSO" .PP \fBpam_putenv\fR(3), \fBpam\fR(8) .SH "STANDARDS" .PP The \fBpam_misc_setenv\fR function is part of the \fBlibpam_misc\fR Library and not defined in any standard\&. Linux-PAM-1.1.8/doc/man/pam_start.30000644000000000000000000000716012216527631013531 00000000000000'\" t .\" Title: pam_start .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_START" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_start \- initialization of PAM transaction .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_start('u .BI "int pam_start(const\ char\ *" "service_name" ", const\ char\ *" "user" ", const\ struct\ pam_conv\ *" "pam_conversation" ", pam_handle_t\ **" "pamh" ");" .SH "DESCRIPTION" .PP The \fBpam_start\fR function creates the PAM context and initiates the PAM transaction\&. It is the first of the PAM functions that needs to be called by an application\&. The transaction state is contained entirely within the structure identified by this handle, so it is possible to have multiple transactions in parallel\&. But it is not possible to use the same handle for different transactions, a new one is needed for every new context\&. .PP The \fIservice_name\fR argument specifies the name of the service to apply and will be stored as PAM_SERVICE item in the new context\&. The policy for the service will be read from the file /etc/pam\&.d/service_name or, if that file does not exist, from /etc/pam\&.conf\&. .PP The \fIuser\fR argument can specify the name of the target user and will be stored as PAM_USER item\&. If the argument is NULL, the module has to ask for this item if necessary\&. .PP The \fIpam_conversation\fR argument points to a \fIstruct pam_conv\fR describing the conversation function to use\&. An application must provide this for direct communication between a loaded module and the application\&. .PP Following a successful return (PAM_SUCCESS) the contents of \fIpamh\fR is a handle that contains the PAM context for successive calls to the PAM functions\&. In an error case is the content of \fIpamh\fR undefined\&. .PP The \fIpam_handle_t\fR is a blind structure and the application should not attempt to probe it directly for information\&. Instead the PAM library provides the functions \fBpam_set_item\fR(3) and \fBpam_get_item\fR(3)\&. The PAM handle cannot be used for mulitiple authentications at the same time as long as \fBpam_end\fR was not called on it before\&. .SH "RETURN VALUES" .PP PAM_ABORT .RS 4 General failure\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_SUCCESS .RS 4 Transaction was successful created\&. .RE .PP PAM_SYSTEM_ERR .RS 4 System error, for example a NULL pointer was submitted instead of a pointer to data\&. .RE .SH "SEE ALSO" .PP \fBpam_get_data\fR(3), \fBpam_set_data\fR(3), \fBpam_end\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/man/pam_get_authtok_verify.30000644000000000000000000000002612216527624016272 00000000000000.so pam_get_authtok.3 Linux-PAM-1.1.8/doc/man/pam_misc_drop_env.30000644000000000000000000000356012216527632015224 00000000000000'\" t .\" Title: pam_misc_drop_env .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_MISC_DROP_ENV" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_misc_drop_env \- liberating a locally saved environment .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_misc_drop_env('u .BI "int pam_misc_drop_env(char\ **" "env" ");" .SH "DESCRIPTION" .PP This function is defined to complement the \fBpam_getenvlist\fR(3) function\&. It liberates the memory associated with \fIenv\fR, \fIoverwriting\fR with \fI0\fR all memory before \fBfree()\fRing it\&. .SH "SEE ALSO" .PP \fBpam_getenvlist\fR(3), \fBpam\fR(8) .SH "STANDARDS" .PP The \fBpam_misc_drop_env\fR function is part of the \fBlibpam_misc\fR Library and not defined in any standard\&. Linux-PAM-1.1.8/doc/man/pam_fail_delay.30000644000000000000000000001314412216527624014466 00000000000000'\" t .\" Title: pam_fail_delay .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_FAIL_DELAY" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_fail_delay \- request a delay on failure .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_fail_delay('u .BI "int pam_fail_delay(pam_handle_t\ *" "pamh" ", unsigned\ int\ " "usec" ");" .SH "DESCRIPTION" .PP The \fBpam_fail_delay\fR function provides a mechanism by which an application or module can suggest a minimum delay of \fIusec\fR micro\-seconds\&. The function keeps a record of the longest time requested with this function\&. Should \fBpam_authenticate\fR(3) fail, the failing return to the application is delayed by an amount of time randomly distributed (by up to 25%) about this longest value\&. .PP Independent of success, the delay time is reset to its zero default value when the PAM service module returns control to the application\&. The delay occurs \fIafter\fR all authentication modules have been called, but \fIbefore\fR control is returned to the service application\&. .PP When using this function the programmer should check if it is available with: .sp .if n \{\ .RS 4 .\} .nf #ifdef HAVE_PAM_FAIL_DELAY \&.\&.\&.\&. #endif /* HAVE_PAM_FAIL_DELAY */ .fi .if n \{\ .RE .\} .PP For applications written with a single thread that are event driven in nature, generating this delay may be undesirable\&. Instead, the application may want to register the delay in some other way\&. For example, in a single threaded server that serves multiple authentication requests from a single event loop, the application might want to simply mark a given connection as blocked until an application timer expires\&. For this reason the delay function can be changed with the \fIPAM_FAIL_DELAY\fR item\&. It can be queried and set with \fBpam_get_item\fR(3) and \fBpam_set_item \fR(3) respectively\&. The value used to set it should be a function pointer of the following prototype: .sp .if n \{\ .RS 4 .\} .nf void (*delay_fn)(int retval, unsigned usec_delay, void *appdata_ptr); .fi .if n \{\ .RE .\} .sp The arguments being the \fIretval\fR return code of the module stack, the \fIusec_delay\fR micro\-second delay that libpam is requesting and the \fIappdata_ptr\fR that the application has associated with the current \fIpamh\fR\&. This last value was set by the application when it called \fBpam_start\fR(3) or explicitly with \fBpam_set_item\fR(3)\&. Note, if PAM_FAIL_DELAY item is unset (or set to NULL), then no delay will be performed\&. .SH "RATIONALE" .PP It is often possible to attack an authentication scheme by exploiting the time it takes the scheme to deny access to an applicant user\&. In cases of \fIshort\fR timeouts, it may prove possible to attempt a \fIbrute force\fR dictionary attack \-\- with an automated process, the attacker tries all possible passwords to gain access to the system\&. In other cases, where individual failures can take measurable amounts of time (indicating the nature of the failure), an attacker can obtain useful information about the authentication process\&. These latter attacks make use of procedural delays that constitute a \fIcovert channel\fR of useful information\&. .PP To minimize the effectiveness of such attacks, it is desirable to introduce a random delay in a failed authentication process\&. Preferable this value should be set by the application or a special PAM module\&. Standard PAM modules should not modify the delay unconditional\&. .SH "EXAMPLE" .PP For example, a login application may require a failure delay of roughly 3 seconds\&. It will contain the following code: .sp .if n \{\ .RS 4 .\} .nf pam_fail_delay (pamh, 3000000 /* micro\-seconds */ ); pam_authenticate (pamh, 0); .fi .if n \{\ .RE .\} .PP if the modules do not request a delay, the failure delay will be between 2\&.25 and 3\&.75 seconds\&. .PP However, the modules, invoked in the authentication process, may also request delays: .sp .if n \{\ .RS 4 .\} .nf module #1: pam_fail_delay (pamh, 2000000); module #2: pam_fail_delay (pamh, 4000000); .fi .if n \{\ .RE .\} .PP in this case, it is the largest requested value that is used to compute the actual failed delay: here between 3 and 5 seconds\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 Delay was successful adjusted\&. .RE .PP PAM_SYSTEM_ERR .RS 4 A NULL pointer was submitted as PAM handle\&. .RE .SH "SEE ALSO" .PP \fBpam_start\fR(3), \fBpam_get_item\fR(3), \fBpam_strerror\fR(3) .SH "STANDARDS" .PP The \fBpam_fail_delay\fR function is an Linux\-PAM extension\&. Linux-PAM-1.1.8/doc/man/pam.3.xml0000644000000000000000000003576312160065211013112 00000000000000 pam 3 Linux-PAM Manual pam Pluggable Authentication Modules Library #include <security/pam_appl.h> #include <security/pam_modules.h> #include <security/pam_ext.h> DESCRIPTION PAM is a system of libraries that handle the authentication tasks of applications (services) on the system. The library provides a stable general interface (Application Programming Interface - API) that privilege granting programs (such as login1 and su1 ) defer to to perform standard authentication tasks. Initialization and Cleanup The pam_start3 function creates the PAM context and initiates the PAM transaction. It is the first of the PAM functions that needs to be called by an application. The transaction state is contained entirely within the structure identified by this handle, so it is possible to have multiple transactions in parallel. But it is not possible to use the same handle for different transactions, a new one is needed for every new context. The pam_end3 function terminates the PAM transaction and is the last function an application should call in the PAM context. Upon return the handle pamh is no longer valid and all memory associated with it will be invalid. It can be called at any time to terminate a PAM transaction. Authentication The pam_authenticate3 function is used to authenticate the user. The user is required to provide an authentication token depending upon the authentication service, usually this is a password, but could also be a finger print. The pam_setcred3 function manages the userscredentials. Account Management The pam_acct_mgmt3 function is used to determine if the users account is valid. It checks for authentication token and account expiration and verifies access restrictions. It is typically called after the user has been authenticated. Password Management The pam_chauthtok3 function is used to change the authentication token for a given user on request or because the token has expired. Session Management The pam_open_session3 function sets up a user session for a previously successful authenticated user. The session should later be terminated with a call to pam_close_session3 . Conversation The PAM library uses an application-defined callback to allow a direct communication between a loaded module and the application. This callback is specified by the struct pam_conv passed to pam_start3 at the start of the transaction. See pam_conv3 for details. Data Objects The pam_set_item3 and pam_get_item3 functions allows applications and PAM service modules to set and retrieve PAM informations. The pam_get_user3 function is the preferred method to obtain the username. The pam_set_data3 and pam_get_data3 functions allows PAM service modules to set and retrieve free-form data from one invocation to another. Environment and Error Management The pam_putenv3 , pam_getenv3 and pam_getenvlist3 functions are for maintaining a set of private environment variables. The pam_strerror3 function returns a pointer to a string describing the given PAM error code. RETURN VALUES The following return codes are known by PAM: PAM_ABORT Critical error, immediate abort. PAM_ACCT_EXPIRED User account has expired. PAM_AUTHINFO_UNAVAIL Authentication service cannot retrieve authentication info. PAM_AUTHTOK_DISABLE_AGING Authentication token aging disabled. PAM_AUTHTOK_ERR Authentication token manipulation error. PAM_AUTHTOK_EXPIRED Authentication token expired. PAM_AUTHTOK_LOCK_BUSY Authentication token lock busy. PAM_AUTHTOK_RECOVERY_ERR Authentication information cannot be recovered. PAM_AUTH_ERR Authentication failure. PAM_BUF_ERR Memory buffer error. PAM_CONV_ERR Conversation failure. PAM_CRED_ERR Failure setting user credentials. PAM_CRED_EXPIRED User credentials expired. PAM_CRED_INSUFFICIENT Insufficient credentials to access authentication data. PAM_CRED_UNAVAIL Authentication service cannot retrieve user credentials. PAM_IGNORE The return value should be ignored by PAM dispatch. PAM_MAXTRIES Have exhausted maximum number of retries for service. PAM_MODULE_UNKNOWN Module is unknown. PAM_NEW_AUTHTOK_REQD Authentication token is no longer valid; new one required. PAM_NO_MODULE_DATA No module specific data is present. PAM_OPEN_ERR Failed to load module. PAM_PERM_DENIED Permission denied. PAM_SERVICE_ERR Error in service module. PAM_SESSION_ERR Cannot make/remove an entry for the specified session. PAM_SUCCESS Success. PAM_SYMBOL_ERR Symbol not found. PAM_SYSTEM_ERR System error. PAM_TRY_AGAIN Failed preliminary check by password service. PAM_USER_UNKNOWN User not known to the underlying authentication module. SEE ALSO pam_acct_mgmt3 , pam_authenticate3 , pam_chauthtok3 , pam_close_session3 , pam_conv3 , pam_end3 , pam_get_data3 , pam_getenv3 , pam_getenvlist3 , pam_get_item3 , pam_get_user3 , pam_open_session3 , pam_putenv3 , pam_set_data3 , pam_set_item3 , pam_setcred3 , pam_start3 , pam_strerror3 NOTES The libpam interfaces are only thread-safe if each thread within the multithreaded application uses its own PAM handle. Linux-PAM-1.1.8/doc/man/PAM.80000644000000000000000000001236212216527621012160 00000000000000'\" t .\" Title: pam .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM" "8" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" PAM, pam \- Pluggable Authentication Modules for Linux .SH "DESCRIPTION" .PP This manual is intended to offer a quick introduction to \fBLinux\-PAM\fR\&. For more information the reader is directed to the \fBLinux\-PAM system administrators\*(Aq guide\fR\&. .PP \fBLinux\-PAM\fR is a system of libraries that handle the authentication tasks of applications (services) on the system\&. The library provides a stable general interface (Application Programming Interface \- API) that privilege granting programs (such as \fBlogin\fR(1) and \fBsu\fR(1)) defer to to perform standard authentication tasks\&. .PP The principal feature of the PAM approach is that the nature of the authentication is dynamically configurable\&. In other words, the system administrator is free to choose how individual service\-providing applications will authenticate users\&. This dynamic configuration is set by the contents of the single \fBLinux\-PAM\fR configuration file /etc/pam\&.conf\&. Alternatively, the configuration can be set by individual configuration files located in the /etc/pam\&.d/ directory\&. The presence of this directory will cause \fBLinux\-PAM\fR to \fIignore\fR/etc/pam\&.conf\&. .PP From the point of view of the system administrator, for whom this manual is provided, it is not of primary importance to understand the internal behavior of the \fBLinux\-PAM\fR library\&. The important point to recognize is that the configuration file(s) \fIdefine\fR the connection between applications (\fBservices\fR) and the pluggable authentication modules (\fBPAM\fRs) that perform the actual authentication tasks\&. .PP \fBLinux\-PAM\fR separates the tasks of \fIauthentication\fR into four independent management groups: \fBaccount\fR management; \fBauth\fRentication management; \fBpassword\fR management; and \fBsession\fR management\&. (We highlight the abbreviations used for these groups in the configuration file\&.) .PP Simply put, these groups take care of different aspects of a typical user\*(Aqs request for a restricted service: .PP \fBaccount\fR \- provide account verification types of service: has the user\*(Aqs password expired?; is this user permitted access to the requested service? .PP \fBauth\fRentication \- authenticate a user and set up user credentials\&. Typically this is via some challenge\-response request that the user must satisfy: if you are who you claim to be please enter your password\&. Not all authentications are of this type, there exist hardware based authentication schemes (such as the use of smart\-cards and biometric devices), with suitable modules, these may be substituted seamlessly for more standard approaches to authentication \- such is the flexibility of \fBLinux\-PAM\fR\&. .PP \fBpassword\fR \- this group\*(Aqs responsibility is the task of updating authentication mechanisms\&. Typically, such services are strongly coupled to those of the \fBauth\fR group\&. Some authentication mechanisms lend themselves well to being updated with such a function\&. Standard UN*X password\-based access is the obvious example: please enter a replacement password\&. .PP \fBsession\fR \- this group of tasks cover things that should be done prior to a service being given and after it is withdrawn\&. Such tasks include the maintenance of audit trails and the mounting of the user\*(Aqs home directory\&. The \fBsession\fR management group is important as it provides both an opening and closing hook for modules to affect the services available to a user\&. .SH "FILES" .PP /etc/pam\&.conf .RS 4 the configuration file .RE .PP /etc/pam\&.d .RS 4 the \fBLinux\-PAM\fR configuration directory\&. Generally, if this directory is present, the /etc/pam\&.conf file is ignored\&. .RE .SH "ERRORS" .PP Typically errors generated by the \fBLinux\-PAM\fR system of libraries, will be written to \fBsyslog\fR(3)\&. .SH "CONFORMING TO" .PP DCE\-RFC 86\&.0, October 1995\&. Contains additional features, but remains backwardly compatible with this RFC\&. .SH "SEE ALSO" .PP \fBpam\fR(3), \fBpam_authenticate\fR(3), \fBpam_sm_setcred\fR(3), \fBpam_strerror\fR(3), \fBPAM\fR(8) Linux-PAM-1.1.8/doc/man/pam_sm_chauthtok.3.xml0000644000000000000000000001572412160065211015656 00000000000000 pam_sm_chauthtok 3 Linux-PAM Manual pam_sm_chauthtok PAM service function for authentication token management #define PAM_SM_PASSWORD #include <security/pam_modules.h> PAM_EXTERN int pam_sm_chauthtok pam_handle_t *pamh int flags int argc const char **argv DESCRIPTION The pam_sm_chauthtok function is the service module's implementation of the pam_chauthtok3 interface. This function is used to (re-)set the authentication token of the user. Valid flags, which may be logically OR'd with PAM_SILENT, are: PAM_SILENT Do not emit any messages. PAM_CHANGE_EXPIRED_AUTHTOK This argument indicates to the module that the users authentication token (password) should only be changed if it has expired. This flag is optional and must be combined with one of the following two flags. Note, however, the following two options are mutually exclusive. PAM_PRELIM_CHECK This indicates that the modules are being probed as to their ready status for altering the user's authentication token. If the module requires access to another system over some network it should attempt to verify it can connect to this system on receiving this flag. If a module cannot establish it is ready to update the user's authentication token it should return PAM_TRY_AGAIN, this information will be passed back to the application. If the control value sufficient is used in the password stack, the PAM_PRELIM_CHECK section of the modules following that control value is not always executed. PAM_UPDATE_AUTHTOK This informs the module that this is the call it should change the authorization tokens. If the flag is logically OR'd with PAM_CHANGE_EXPIRED_AUTHTOK, the token is only changed if it has actually expired. The PAM library calls this function twice in succession. The first time with PAM_PRELIM_CHECK and then, if the module does not return PAM_TRY_AGAIN, subsequently with PAM_UPDATE_AUTHTOK. It is only on the second call that the authorization token is (possibly) changed. RETURN VALUES PAM_AUTHTOK_ERR The module was unable to obtain the new authentication token. PAM_AUTHTOK_RECOVERY_ERR The module was unable to obtain the old authentication token. PAM_AUTHTOK_LOCK_BUSY Cannot change the authentication token since it is currently locked. PAM_AUTHTOK_DISABLE_AGING Authentication token aging has been disabled. PAM_PERM_DENIED Permission denied. PAM_TRY_AGAIN Preliminary check was unsuccessful. Signals an immediate return to the application is desired. PAM_SUCCESS The authentication token was successfully updated. PAM_USER_UNKNOWN User unknown to password service. SEE ALSO pam3 , pam_chauthtok3 , pam_sm_chauthtok3 , pam_strerror3 , PAM8 Linux-PAM-1.1.8/doc/man/pam_putenv.30000644000000000000000000000577412216527627013733 00000000000000'\" t .\" Title: pam_putenv .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_PUTENV" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_putenv \- set or change PAM environment variable .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_putenv('u .BI "int pam_putenv(pam_handle_t\ *" "pamh" ", const\ char\ *" "name_value" ");" .SH "DESCRIPTION" .PP The \fBpam_putenv\fR function is used to add or change the value of PAM environment variables as associated with the \fIpamh\fR handle\&. .PP The \fIpamh\fR argument is an authentication handle obtained by a prior call to pam_start()\&. The \fIname_value\fR argument is a single NUL terminated string of one of the following forms: .PP NAME=value of variable .RS 4 In this case the environment variable of the given NAME is set to the indicated value: \fIvalue of variable\fR\&. If this variable is already known, it is overwritten\&. Otherwise it is added to the PAM environment\&. .RE .PP NAME= .RS 4 This function sets the variable to an empty value\&. It is listed separately to indicate that this is the correct way to achieve such a setting\&. .RE .PP NAME .RS 4 Without an \*(Aq=\*(Aq the \fBpam_putenv\fR() function will delete the corresponding variable from the PAM environment\&. .RE .PP \fBpam_putenv\fR() operates on a copy of \fIname_value\fR, which means in contrast to \fBputenv\fR(3), the application is responsible to free the data\&. .SH "RETURN VALUES" .PP PAM_PERM_DENIED .RS 4 Argument \fIname_value\fR given is a NULL pointer\&. .RE .PP PAM_BAD_ITEM .RS 4 Variable requested (for deletion) is not currently set\&. .RE .PP PAM_ABORT .RS 4 The \fIpamh\fR handle is corrupt\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_SUCCESS .RS 4 The environment variable was successfully updated\&. .RE .SH "SEE ALSO" .PP \fBpam_start\fR(3), \fBpam_getenv\fR(3), \fBpam_getenvlist\fR(3), \fBpam_strerror\fR(3), \fBpam\fR(8) Linux-PAM-1.1.8/doc/man/misc_conv.30000644000000000000000000001175612216527632013526 00000000000000'\" t .\" Title: misc_conv .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "MISC_CONV" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" misc_conv \- text based conversation function .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ misc_conv('u .BI "int misc_conv(int\ " "num_msg" ", const\ struct\ pam_message\ **" "msgm" ", struct\ pam_response\ **" "response" ", void\ *" "appdata_ptr" ");" .SH "DESCRIPTION" .PP The \fBmisc_conv\fR function is part of \fBlibpam_misc\fR and not of the standard \fBlibpam\fR library\&. This function will prompt the user with the appropriate comments and obtain the appropriate inputs as directed by authentication modules\&. .PP In addition to simply slotting into the appropriate \fBpam_conv\fR(3), this function provides some time\-out facilities\&. The function exports five variables that can be used by an application programmer to limit the amount of time this conversation function will spend waiting for the user to type something\&. The five variabls are as follows: .PP \fBtime_t\fR \fIpam_misc_conv_warn_time\fR; .RS 4 This variable contains the \fItime\fR (as returned by \fBtime\fR(2)) that the user should be first warned that the clock is ticking\&. By default it has the value 0, which indicates that no such warning will be given\&. The application may set its value to sometime in the future, but this should be done prior to passing control to the \fILinux\-PAM\fR library\&. .RE .PP \fBconst char *\fR\fIpam_misc_conv_warn_line\fR; .RS 4 Used in conjuction with \fIpam_misc_conv_warn_time\fR, this variable is a pointer to the string that will be displayed when it becomes time to warn the user that the timeout is approaching\&. Its default value is a translated version of \(lq\&.\&.\&.Time is running out\&.\&.\&.\(rq, but this can be changed by the application prior to passing control to \fILinux\-PAM\fR\&. .RE .PP \fBtime_t\fR \fIpam_misc_conv_die_time\fR; .RS 4 This variable contains the \fItime\fR (as returned by \fBtime\fR(2)) that the will time out\&. By default it has the value 0, which indicates that the conversation function will not timeout\&. The application may set its value to sometime in the future, but this should be done prior to passing control to the \fILinux\-PAM\fR library\&. .RE .PP \fBconst char *\fR\fIpam_misc_conv_die_line\fR; .RS 4 Used in conjuction with \fIpam_misc_conv_die_time\fR, this variable is a pointer to the string that will be displayed when the conversation times out\&. Its default value is a translated version of \(lq\&.\&.\&.Sorry, your time is up!\(rq, but this can be changed by the application prior to passing control to \fILinux\-PAM\fR\&. .RE .PP \fBint\fR \fIpam_misc_conv_died\fR; .RS 4 Following a return from the \fILinux\-PAM\fR libraray, the value of this variable indicates whether the conversation has timed out\&. A value of 1 indicates the time\-out occurred\&. .RE .PP The following two function pointers are available for supporting binary prompts in the conversation function\&. They are optimized for the current incarnation of the \fBlibpamc\fR library and are subject to change\&. .PP \fBint\fR \fI(*pam_binary_handler_fn)\fR(\fBvoid *\fR\fIappdata\fR, \fBpamc_bp_t *\fR\fIprompt_p\fR); .RS 4 This function pointer is initialized to NULL but can be filled with a function that provides machine\-machine (hidden) message exchange\&. It is intended for use with hidden authentication protocols such as RSA or Diffie\-Hellman key exchanges\&. (This is still under development\&.) .RE .PP \fBint\fR \fI(*pam_binary_handler_free)\fR(\fBvoid *\fR\fIappdata\fR, \fBpamc_bp_t *\fR\fIdelete_me\fR); .RS 4 This function pointer is initialized to \fBPAM_BP_RENEW(delete_me, 0, 0)\fR, but can be redefined as desired by the application\&. .RE .SH "SEE ALSO" .PP \fBpam_conv\fR(3), \fBpam\fR(8) .SH "STANDARDS" .PP The \fBmisc_conv\fR function is part of the \fBlibpam_misc\fR Library and not defined in any standard\&. Linux-PAM-1.1.8/doc/man/pam_close_session.3.xml0000644000000000000000000000643312160065211016032 00000000000000 pam_close_session 3 Linux-PAM Manual pam_close_session terminate PAM session management #include <security/pam_appl.h> int pam_close_session pam_handle_t *pamh int flags DESCRIPTION The pam_close_session function is used to indicate that an authenticated session has ended. The session should have been created with a call to pam_open_session3 . It should be noted that the effective uid, geteuid2 . of the application should be of sufficient privilege to perform such tasks as unmounting the user's home directory for example. The flags argument is the binary or of zero or more of the following values: PAM_SILENT Do not emit any messages. RETURN VALUES PAM_ABORT General failure. PAM_BUF_ERR Memory buffer error. PAM_SESSION_ERR Session failure. PAM_SUCCESS Session was successful terminated. SEE ALSO pam_open_session3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam_open_session.3.xml0000644000000000000000000000644312160065211015667 00000000000000 pam_open_session 3 Linux-PAM Manual pam_open_session start PAM session management #include <security/pam_appl.h> int pam_open_session pam_handle_t *pamh int flags DESCRIPTION The pam_open_session function sets up a user session for a previously successful authenticated user. The session should later be terminated with a call to pam_close_session3 . It should be noted that the effective uid, geteuid2 . of the application should be of sufficient privilege to perform such tasks as creating or mounting the user's home directory for example. The flags argument is the binary or of zero or more of the following values: PAM_SILENT Do not emit any messages. RETURN VALUES PAM_ABORT General failure. PAM_BUF_ERR Memory buffer error. PAM_SESSION_ERR Session failure. PAM_SUCCESS Session was successful created. SEE ALSO pam_close_session3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam_strerror.30000644000000000000000000000365612216527631014264 00000000000000'\" t .\" Title: pam_strerror .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_STRERROR" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_strerror \- return string describing PAM error code .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'const\ char\ *pam_strerror('u .BI "const char *pam_strerror(pam_handle_t\ *" "pamh" ", int\ " "errnum" ");" .SH "DESCRIPTION" .PP The \fBpam_strerror\fR function returns a pointer to a string describing the error code passed in the argument \fIerrnum\fR, possibly using the LC_MESSAGES part of the current locale to select the appropriate language\&. This string must not be modified by the application\&. No library function will modify this string\&. .SH "RETURN VALUES" .PP This function returns always a pointer to a string\&. .SH "SEE ALSO" .PP \fBpam\fR(8) Linux-PAM-1.1.8/doc/man/pam_get_item.30000644000000000000000000001422412216527625014173 00000000000000'\" t .\" Title: pam_get_item .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_GET_ITEM" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_get_item \- getting PAM informations .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_get_item('u .BI "int pam_get_item(const\ pam_handle_t\ *" "pamh" ", int\ " "item_type" ", const\ void\ **" "item" ");" .SH "DESCRIPTION" .PP The \fBpam_get_item\fR function allows applications and PAM service modules to access and retrieve PAM informations of \fIitem_type\fR\&. Upon successful return, \fIitem\fR contains a pointer to the value of the corresponding item\&. Note, this is a pointer to the \fIactual\fR data and should \fBnot\fR be \fIfree()\fR\*(Aqed or over\-written! The following values are supported for \fIitem_type\fR: .PP PAM_SERVICE .RS 4 The service name (which identifies that PAM stack that the PAM functions will use to authenticate the program)\&. .RE .PP PAM_USER .RS 4 The username of the entity under whose identity service will be given\&. That is, following authentication, \fIPAM_USER\fR identifies the local entity that gets to use the service\&. Note, this value can be mapped from something (eg\&., "anonymous") to something else (eg\&. "guest119") by any module in the PAM stack\&. As such an application should consult the value of \fIPAM_USER\fR after each call to a PAM function\&. .RE .PP PAM_USER_PROMPT .RS 4 The string used when prompting for a user\*(Aqs name\&. The default value for this string is a localized version of "login: "\&. .RE .PP PAM_TTY .RS 4 The terminal name: prefixed by /dev/ if it is a device file; for graphical, X\-based, applications the value for this item should be the \fI$DISPLAY\fR variable\&. .RE .PP PAM_RUSER .RS 4 The requesting user name: local name for a locally requesting user or a remote user name for a remote requesting user\&. .sp Generally an application or module will attempt to supply the value that is most strongly authenticated (a local account before a remote one\&. The level of trust in this value is embodied in the actual authentication stack associated with the application, so it is ultimately at the discretion of the system administrator\&. .sp \fIPAM_RUSER@PAM_RHOST\fR should always identify the requesting user\&. In some cases, \fIPAM_RUSER\fR may be NULL\&. In such situations, it is unclear who the requesting entity is\&. .RE .PP PAM_RHOST .RS 4 The requesting hostname (the hostname of the machine from which the \fIPAM_RUSER\fR entity is requesting service)\&. That is \fIPAM_RUSER@PAM_RHOST\fR does identify the requesting user\&. In some applications, \fIPAM_RHOST\fR may be NULL\&. In such situations, it is unclear where the authentication request is originating from\&. .RE .PP PAM_AUTHTOK .RS 4 The authentication token (often a password)\&. This token should be ignored by all module functions besides \fBpam_sm_authenticate\fR(3) and \fBpam_sm_chauthtok\fR(3)\&. In the former function it is used to pass the most recent authentication token from one stacked module to another\&. In the latter function the token is used for another purpose\&. It contains the currently active authentication token\&. .RE .PP PAM_OLDAUTHTOK .RS 4 The old authentication token\&. This token should be ignored by all module functions except \fBpam_sm_chauthtok\fR(3)\&. .RE .PP PAM_CONV .RS 4 The pam_conv structure\&. See \fBpam_conv\fR(3)\&. .RE .PP The following additional items are specific to Linux\-PAM and should not be used in portable applications: .PP PAM_FAIL_DELAY .RS 4 A function pointer to redirect centrally managed failure delays\&. See \fBpam_fail_delay\fR(3)\&. .RE .PP PAM_XDISPLAY .RS 4 The name of the X display\&. For graphical, X\-based applications the value for this item should be the \fI$DISPLAY\fR variable\&. This value may be used independently of \fIPAM_TTY\fR for passing the name of the display\&. .RE .PP PAM_XAUTHDATA .RS 4 A pointer to a structure containing the X authentication data required to make a connection to the display specified by \fIPAM_XDISPLAY\fR, if such information is necessary\&. See \fBpam_xauth_data\fR(3)\&. .RE .PP PAM_AUTHTOK_TYPE .RS 4 The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: "\&. The example word \fIUNIX\fR can be replaced with this item, by default it is empty\&. This item is used by \fBpam_get_authtok\fR(3)\&. .RE .PP If a service module wishes to obtain the name of the user, it should not use this function, but instead perform a call to \fBpam_get_user\fR(3)\&. .PP Only a service module is privileged to read the authentication tokens, PAM_AUTHTOK and PAM_OLDAUTHTOK\&. .SH "RETURN VALUES" .PP PAM_BAD_ITEM .RS 4 The application attempted to set an undefined or inaccessible item\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_PERM_DENIED .RS 4 The value of \fIitem\fR was NULL\&. .RE .PP PAM_SUCCESS .RS 4 Data was successful updated\&. .RE .PP PAM_SYSTEM_ERR .RS 4 The \fIpam_handle_t\fR passed as first argument was invalid\&. .RE .SH "SEE ALSO" .PP \fBpam_set_item\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/man/pam.80000644000000000000000000000001212216527621012305 00000000000000.so PAM.8 Linux-PAM-1.1.8/doc/man/pam_setcred.30000644000000000000000000000702612216527627014033 00000000000000'\" t .\" Title: pam_setcred .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SETCRED" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_setcred \- establish / delete user credentials .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_setcred('u .BI "int pam_setcred(pam_handle_t\ *" "pamh" ", int\ " "flags" ");" .SH "DESCRIPTION" .PP The \fBpam_setcred\fR function is used to establish, maintain and delete the credentials of a user\&. It should be called to set the credentials after a user has been authenticated and before a session is opened for the user (with \fBpam_open_session\fR(3))\&. The credentials should be deleted after the session has been closed (with \fBpam_close_session\fR(3))\&. .PP A credential is something that the user possesses\&. It is some property, such as a \fIKerberos\fR ticket, or a supplementary group membership that make up the uniqueness of a given user\&. On a Linux system the user\*(Aqs \fIUID\fR and \fIGID\fR\*(Aqs are credentials too\&. However, it has been decided that these properties (along with the default supplementary groups of which the user is a member) are credentials that should be set directly by the application and not by PAM\&. Such credentials should be established, by the application, prior to a call to this function\&. For example, \fBinitgroups\fR(2) (or equivalent) should have been performed\&. .PP Valid \fIflags\fR, any one of which, may be logically OR\*(Aqd with \fBPAM_SILENT\fR, are: .PP PAM_ESTABLISH_CRED .RS 4 Initialize the credentials for the user\&. .RE .PP PAM_DELETE_CRED .RS 4 Delete the user\*(Aqs credentials\&. .RE .PP PAM_REINITIALIZE_CRED .RS 4 Fully reinitialize the user\*(Aqs credentials\&. .RE .PP PAM_REFRESH_CRED .RS 4 Extend the lifetime of the existing credentials\&. .RE .SH "RETURN VALUES" .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_CRED_ERR .RS 4 Failed to set user credentials\&. .RE .PP PAM_CRED_EXPIRED .RS 4 User credentials are expired\&. .RE .PP PAM_CRED_UNAVAIL .RS 4 Failed to retrieve user credentials\&. .RE .PP PAM_SUCCESS .RS 4 Data was successful stored\&. .RE .PP PAM_SYSTEM_ERR .RS 4 A NULL pointer was submitted as PAM handle, the function was called by a module or another system error occured\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User is not known to an authentication module\&. .RE .SH "SEE ALSO" .PP \fBpam_authenticate\fR(3), \fBpam_open_session\fR(3), \fBpam_close_session\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/man/pam_set_item.3.xml0000644000000000000000000001001612160065211014763 00000000000000 --> ]> pam_set_item 3 Linux-PAM Manual pam_set_item set and update PAM informations #include <security/pam_modules.h> int pam_set_item pam_handle_t *pamh int item_type const void *item DESCRIPTION The pam_set_item function allows applications and PAM service modules to access and to update PAM informations of item_type. For this a copy of the object pointed to by the item argument is created. The following item_types are supported: The following additional items are specific to Linux-PAM and should not be used in portable applications: For all item_types, other than PAM_CONV and PAM_FAIL_DELAY, item is a pointer to a <NUL> terminated character string. In the case of PAM_CONV, item points to an initialized pam_conv structure. In the case of PAM_FAIL_DELAY, item is a function pointer: void (*delay_fn)(int retval, unsigned usec_delay, void *appdata_ptr) Both, PAM_AUTHTOK and PAM_OLDAUTHTOK, will be reseted before returning to the application. Which means an application is not able to access the authentication tokens. RETURN VALUES PAM_BAD_ITEM The application attempted to set an undefined or inaccessible item. PAM_BUF_ERR Memory buffer error. PAM_SUCCESS Data was successful updated. PAM_SYSTEM_ERR The pam_handle_t passed as first argument was invalid. SEE ALSO pam_get_item3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam_putenv.3.xml0000644000000000000000000001143112160065211014475 00000000000000 pam_putenv 3 Linux-PAM Manual pam_putenv set or change PAM environment variable #include <security/pam_appl.h> int pam_putenv pam_handle_t *pamh const char *name_value DESCRIPTION The pam_putenv function is used to add or change the value of PAM environment variables as associated with the pamh handle. The pamh argument is an authentication handle obtained by a prior call to pam_start(). The name_value argument is a single NUL terminated string of one of the following forms: NAME=value of variable In this case the environment variable of the given NAME is set to the indicated value: value of variable. If this variable is already known, it is overwritten. Otherwise it is added to the PAM environment. NAME= This function sets the variable to an empty value. It is listed separately to indicate that this is the correct way to achieve such a setting. NAME Without an '=' the pam_putenv() function will delete the corresponding variable from the PAM environment. pam_putenv() operates on a copy of name_value, which means in contrast to putenv3 , the application is responsible to free the data. RETURN VALUES PAM_PERM_DENIED Argument name_value given is a NULL pointer. PAM_BAD_ITEM Variable requested (for deletion) is not currently set. PAM_ABORT The pamh handle is corrupt. PAM_BUF_ERR Memory buffer error. PAM_SUCCESS The environment variable was successfully updated. SEE ALSO pam_start3 , pam_getenv3 , pam_getenvlist3 , pam_strerror3 , pam8 Linux-PAM-1.1.8/doc/man/pam_prompt.3.xml0000644000000000000000000000703112160065211014476 00000000000000 pam_prompt 3 Linux-PAM Manual pam_prompt pam_vprompt interface to conversation function #include <security/pam_ext.h> void pam_prompt pam_handle_t *pamh int style char **response const char *fmt ... void pam_vprompt pam_handle_t *pamh int style char **response const char *fmt va_list args DESCRIPTION The pam_prompt function constructs a message from the specified format string and arguments and passes it to the conversation function as set by the service. Upon successful return, response is set to point to a string returned from the conversation function. This string is allocated on heap and should be freed. RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_CONV_ERR Conversation failure. PAM_SUCCESS Transaction was successful created. PAM_SYSTEM_ERR System error. SEE ALSO pam8 , pam_conv3 STANDARDS The pam_prompt and pam_vprompt functions are Linux-PAM extensions. Linux-PAM-1.1.8/doc/man/pam_authenticate.3.xml0000644000000000000000000001254312160065211015637 00000000000000 pam_authenticate 3 Linux-PAM Manual pam_authenticate account authentication #include <security/pam_appl.h> int pam_authenticate pam_handle_t *pamh int flags DESCRIPTION The pam_authenticate function is used to authenticate the user. The user is required to provide an authentication token depending upon the authentication service, usually this is a password, but could also be a finger print. The PAM service module may request that the user enter their username vio the the conversation mechanism (see pam_start3 and pam_conv3 ). The name of the authenticated user will be present in the PAM item PAM_USER. This item may be recovered with a call to pam_get_item3 . The pamh argument is an authentication handle obtained by a prior call to pam_start(). The flags argument is the binary or of zero or more of the following values: PAM_SILENT Do not emit any messages. PAM_DISALLOW_NULL_AUTHTOK The PAM module service should return PAM_AUTH_ERR if the user does not have a registered authentication token. RETURN VALUES PAM_ABORT The application should exit immediately after calling pam_end3 first. PAM_AUTH_ERR The user was not authenticated. PAM_CRED_INSUFFICIENT For some reason the application does not have sufficient credentials to authenticate the user. PAM_AUTHINFO_UNVAIL The modules were not able to access the authentication information. This might be due to a network or hardware failure etc. PAM_MAXTRIES One or more of the authentication modules has reached its limit of tries authenticating the user. Do not try again. PAM_SUCCESS The user was successfully authenticated. PAM_USER_UNKNOWN User unknown to authentication service. SEE ALSO pam_start3 , pam_setcred3 , pam_chauthtok3 , pam_strerror3 , pam8 Linux-PAM-1.1.8/doc/man/pam_getenv.3.xml0000644000000000000000000000427612160065211014455 00000000000000 pam_getenv 3 Linux-PAM Manual pam_getenv get a PAM environment variable #include <security/pam_appl.h> const char *pam_getenv pam_handle_t *pamh const char *name DESCRIPTION The pam_getenv function searches the PAM environment list as associated with the handle pamh for an item that matches the string pointed to by name and returns a pointer to the value of the environment variable. The application is not allowed to free the data. RETURN VALUES The pam_getenv function returns NULL on failure. SEE ALSO pam_start3 , pam_getenvlist3 , pam_putenv3 , pam8 Linux-PAM-1.1.8/doc/man/pam_prompt.30000644000000000000000000000463512216527626013725 00000000000000'\" t .\" Title: pam_prompt .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_PROMPT" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_prompt, pam_vprompt \- interface to conversation function .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'void\ pam_prompt('u .BI "void pam_prompt(pam_handle_t\ *" "pamh" ", int\ " "style" ", char\ **" "response" ", const\ char\ *" "fmt" ", " "\&.\&.\&." ");" .HP \w'void\ pam_vprompt('u .BI "void pam_vprompt(pam_handle_t\ *" "pamh" ", int\ " "style" ", char\ **" "response" ", const\ char\ *" "fmt" ", va_list\ " "args" ");" .SH "DESCRIPTION" .PP The \fBpam_prompt\fR function constructs a message from the specified format string and arguments and passes it to the conversation function as set by the service\&. Upon successful return, \fIresponse\fR is set to point to a string returned from the conversation function\&. This string is allocated on heap and should be freed\&. .SH "RETURN VALUES" .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_CONV_ERR .RS 4 Conversation failure\&. .RE .PP PAM_SUCCESS .RS 4 Transaction was successful created\&. .RE .PP PAM_SYSTEM_ERR .RS 4 System error\&. .RE .SH "SEE ALSO" .PP \fBpam\fR(8), \fBpam_conv\fR(3) .SH "STANDARDS" .PP The \fBpam_prompt\fR and \fBpam_vprompt\fR functions are Linux\-PAM extensions\&. Linux-PAM-1.1.8/doc/man/pam_misc_drop_env.3.xml0000644000000000000000000000403012160065211016000 00000000000000 pam_misc_drop_env 3 Linux-PAM Manual pam_misc_drop_env liberating a locally saved environment #include <security/pam_misc.h> int pam_misc_drop_env char **env DESCRIPTION This function is defined to complement the pam_getenvlist3 function. It liberates the memory associated with env, overwriting with 0 all memory before free()ing it. SEE ALSO pam_getenvlist3 , pam8 STANDARDS The pam_misc_drop_env function is part of the libpam_misc Library and not defined in any standard. Linux-PAM-1.1.8/doc/man/pam_sm_acct_mgmt.30000644000000000000000000000627112216527630015032 00000000000000'\" t .\" Title: pam_sm_acct_mgmt .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SM_ACCT_MGMT" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_sm_acct_mgmt \- PAM service function for account management .SH "SYNOPSIS" .sp .ft B .nf #define PAM_SM_ACCOUNT .fi .ft .sp .ft B .nf #include .fi .ft .HP \w'PAM_EXTERN\ int\ pam_sm_acct_mgmt('u .BI "PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t\ *" "pamh" ", int\ " "flags" ", int\ " "argc" ", const\ char\ **" "argv" ");" .SH "DESCRIPTION" .PP The \fBpam_sm_acct_mgmt\fR function is the service module\*(Aqs implementation of the \fBpam_acct_mgmt\fR(3) interface\&. .PP This function performs the task of establishing whether the user is permitted to gain access at this time\&. It should be understood that the user has previously been validated by an authentication module\&. This function checks for other things\&. Such things might be: the time of day or the date, the terminal line, remote hostname, etc\&. This function may also determine things like the expiration on passwords, and respond that the user change it before continuing\&. .PP Valid flags, which may be logically OR\*(Aqd with \fIPAM_SILENT\fR, are: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .PP PAM_DISALLOW_NULL_AUTHTOK .RS 4 Return \fBPAM_AUTH_ERR\fR if the database of authentication tokens for this authentication mechanism has a \fINULL\fR entry for the user\&. .RE .SH "RETURN VALUES" .PP PAM_ACCT_EXPIRED .RS 4 User account has expired\&. .RE .PP PAM_AUTH_ERR .RS 4 Authentication failure\&. .RE .PP PAM_NEW_AUTHTOK_REQD .RS 4 The user\*(Aqs authentication token has expired\&. Before calling this function again the application will arrange for a new one to be given\&. This will likely result in a call to \fBpam_sm_chauthtok()\fR\&. .RE .PP PAM_PERM_DENIED .RS 4 Permission denied\&. .RE .PP PAM_SUCCESS .RS 4 The authentication token was successfully updated\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User unknown to password service\&. .RE .SH "SEE ALSO" .PP \fBpam\fR(3), \fBpam_acct_mgmt\fR(3), \fBpam_sm_chauthtok\fR(3), \fBpam_strerror\fR(3), \fBPAM\fR(8) Linux-PAM-1.1.8/doc/man/pam.conf-syntax.xml0000644000000000000000000003753712160065211015222 00000000000000
The syntax of the /etc/pam.conf configuration file is as follows. The file is made up of a list of rules, each rule is typically placed on a single line, but may be extended with an escaped end of line: `\<LF>'. Comments are preceded with `#' marks and extend to the next end of line. The format of each rule is a space separated collection of tokens, the first three being case-insensitive: service type control module-path module-arguments The syntax of files contained in the /etc/pam.d/ directory, are identical except for the absence of any service field. In this case, the service is the name of the file in the /etc/pam.d/ directory. This filename must be in lower case. An important feature of PAM, is that a number of rules may be stacked to combine the services of a number of PAMs for a given authentication task. The service is typically the familiar name of the corresponding application: login and su are good examples. The service-name, other, is reserved for giving default rules. Only lines that mention the current service (or in the absence of such, the other entries) will be associated with the given service-application. The type is the management group that the rule corresponds to. It is used to specify which of the management groups the subsequent module is to be associated with. Valid entries are: account this module type performs non-authentication based account management. It is typically used to restrict/permit access to a service based on the time of day, currently available system resources (maximum number of users) or perhaps the location of the applicant user -- 'root' login only on the console. auth this module type provides two aspects of authenticating the user. Firstly, it establishes that the user is who they claim to be, by instructing the application to prompt the user for a password or other means of identification. Secondly, the module can grant group membership or other privileges through its credential granting properties. password this module type is required for updating the authentication token associated with the user. Typically, there is one module for each 'challenge/response' based authentication (auth) type. session this module type is associated with doing things that need to be done for the user before/after they can be given service. Such things include the logging of information concerning the opening/closing of some data exchange with a user, mounting directories, etc. If the type value from the list above is prepended with a - character the PAM library will not log to the system log if it is not possible to load the module because it is missing in the system. This can be useful especially for modules which are not always installed on the system and are not required for correct authentication and authorization of the login session. The third field, control, indicates the behavior of the PAM-API should the module fail to succeed in its authentication task. There are two types of syntax for this control field: the simple one has a single simple keyword; the more complicated one involves a square-bracketed selection of value=action pairs. For the simple (historical) syntax valid control values are: required failure of such a PAM will ultimately lead to the PAM-API returning failure but only after the remaining stacked modules (for this service and type) have been invoked. requisite like required, however, in the case that such a module returns a failure, control is directly returned to the application or to the superior PAM stack. The return value is that associated with the first required or requisite module to fail. Note, this flag can be used to protect against the possibility of a user getting the opportunity to enter a password over an unsafe medium. It is conceivable that such behavior might inform an attacker of valid accounts on a system. This possibility should be weighed against the not insignificant concerns of exposing a sensitive password in a hostile environment. sufficient if such a module succeeds and no prior required module has failed the PAM framework returns success to the application or to the superior PAM stack immediately without calling any further modules in the stack. A failure of a sufficient module is ignored and processing of the PAM module stack continues unaffected. optional the success or failure of this module is only important if it is the only module in the stack associated with this service+type. include include all lines of given type from the configuration file specified as an argument to this control. substack include all lines of given type from the configuration file specified as an argument to this control. This differs from include in that evaluation of the done and die actions in a substack does not cause skipping the rest of the complete module stack, but only of the substack. Jumps in a substack also can not make evaluation jump out of it, and the whole substack is counted as one module when the jump is done in a parent stack. The reset action will reset the state of a module stack to the state it was in as of beginning of the substack evaluation. For the more complicated syntax valid control values have the following form: [value1=action1 value2=action2 ...] Where valueN corresponds to the return code from the function invoked in the module for which the line is defined. It is selected from one of these: success, open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy, authtok_disable_aging, try_again, ignore, abort, authtok_expired, module_unknown, bad_item, conv_again, incomplete, and default. The last of these, default, implies 'all valueN's not mentioned explicitly. Note, the full list of PAM errors is available in /usr/include/security/_pam_types.h. The actionN can take one of the following forms: ignore when used with a stack of modules, the module's return status will not contribute to the return code the application obtains. bad this action indicates that the return code should be thought of as indicative of the module failing. If this module is the first in the stack to fail, its status value will be used for that of the whole stack. die equivalent to bad with the side effect of terminating the module stack and PAM immediately returning to the application. ok this tells PAM that the administrator thinks this return code should contribute directly to the return code of the full stack of modules. In other words, if the former state of the stack would lead to a return of PAM_SUCCESS, the module's return code will override this value. Note, if the former state of the stack holds some value that is indicative of a modules failure, this 'ok' value will not be used to override that value. done equivalent to ok with the side effect of terminating the module stack and PAM immediately returning to the application. N (an unsigned integer) equivalent to ok with the side effect of jumping over the next N modules in the stack. Note that N equal to 0 is not allowed (and it would be identical to ok in such case). reset clear all memory of the state of the module stack and start again with the next stacked module. Each of the four keywords: required; requisite; sufficient; and optional, have an equivalent expression in terms of the [...] syntax. They are as follows: required [success=ok new_authtok_reqd=ok ignore=ignore default=bad] requisite [success=ok new_authtok_reqd=ok ignore=ignore default=die] sufficient [success=done new_authtok_reqd=done default=ignore] optional [success=ok new_authtok_reqd=ok default=ignore] module-path is either the full filename of the PAM to be used by the application (it begins with a '/'), or a relative pathname from the default module location: /lib/security/ or /lib64/security/, depending on the architecture. module-arguments are a space separated list of tokens that can be used to modify the specific behavior of the given PAM. Such arguments will be documented for each individual module. Note, if you wish to include spaces in an argument, you should surround that argument with square brackets. squid auth required pam_mysql.so user=passwd_query passwd=mada \ db=eminence [query=select user_name from internet_service \ where user_name='%u' and password=PASSWORD('%p') and \ service='web_proxy'] When using this convention, you can include `[' characters inside the string, and if you wish to include a `]' character inside the string that will survive the argument parsing, you should use `\]'. In other words: [..[..\]..] --> ..[..].. Any line in (one of) the configuration file(s), that is not formatted correctly, will generally tend (erring on the side of caution) to make the authentication process fail. A corresponding error is written to the system log files with a call to syslog3 .
Linux-PAM-1.1.8/doc/man/pam_syslog.30000644000000000000000000000450512216527627013721 00000000000000'\" t .\" Title: pam_syslog .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SYSLOG" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_syslog, pam_vsyslog \- send messages to the system logger .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .sp .ft B .nf #include .fi .ft .HP \w'void\ pam_syslog('u .BI "void pam_syslog(pam_handle_t\ *" "pamh" ", int\ " "priority" ", const\ char\ *" "fmt" ", " "\&.\&.\&." ");" .HP \w'void\ pam_vsyslog('u .BI "void pam_vsyslog(pam_handle_t\ *" "pamh" ", int\ " "priority" ", const\ char\ *" "fmt" ", va_list\ " "args" ");" .SH "DESCRIPTION" .PP The \fBpam_syslog\fR function logs messages using \fBsyslog\fR(3) and is intended for internal use by Linux\-PAM and PAM service modules\&. The \fIpriority\fR argument is formed by ORing the facility and the level values as documented in the \fBsyslog\fR(3) manual page\&. .PP The \fBpam_vsyslog\fR function performs the same task as \fBpam_syslog()\fR with the difference that it takes a set of arguments which have been obtained using the \fBstdarg\fR(3) variable argument list macros\&. .SH "SEE ALSO" .PP \fBpam\fR(8) .SH "STANDARDS" .PP The \fBpam_syslog\fR and \fBpam_vsyslog\fR functions are Linux\-PAM extensions\&. Linux-PAM-1.1.8/doc/man/pam_sm_open_session.30000644000000000000000000000432112216527630015572 00000000000000'\" t .\" Title: pam_sm_open_session .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SM_OPEN_SESSION" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_sm_open_session \- PAM service function to start session management .SH "SYNOPSIS" .sp .ft B .nf #define PAM_SM_SESSION .fi .ft .sp .ft B .nf #include .fi .ft .HP \w'PAM_EXTERN\ int\ pam_sm_open_session('u .BI "PAM_EXTERN int pam_sm_open_session(pam_handle_t\ *" "pamh" ", int\ " "flags" ", int\ " "argc" ", const\ char\ **" "argv" ");" .SH "DESCRIPTION" .PP The \fBpam_sm_open_session\fR function is the service module\*(Aqs implementation of the \fBpam_open_session\fR(3) interface\&. .PP This function is called to commence a session\&. The only valid value for \fIflags\fR is zero or: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .SH "RETURN VALUES" .PP PAM_SESSION_ERR .RS 4 Cannot make/remove an entry for the specified session\&. .RE .PP PAM_SUCCESS .RS 4 The session was successfully started\&. .RE .SH "SEE ALSO" .PP \fBpam\fR(3), \fBpam_open_session\fR(3), \fBpam_sm_close_session\fR(3), \fBpam_strerror\fR(3), \fBPAM\fR(8) Linux-PAM-1.1.8/doc/man/pam_set_data.30000644000000000000000000000755612216527627014176 00000000000000'\" t .\" Title: pam_set_data .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SET_DATA" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_set_data \- set module internal data .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_set_data('u .BI "int pam_set_data(pam_handle_t\ *" "pamh" ", const\ char\ *" "module_data_name" ", void\ *" "data" ", void\ " "(*cleanup)(pam_handle_t\ *pamh,\ void\ *data,\ int\ error_status)" ");" .SH "DESCRIPTION" .PP The \fBpam_set_data\fR function associates a pointer to an object with the (hopefully) unique string \fImodule_data_name\fR in the PAM context specified by the \fIpamh\fR argument\&. .PP PAM modules may be dynamically loadable objects\&. In general such files should not contain \fIstatic\fR variables\&. This function and its counterpart \fBpam_get_data\fR(3), provide a mechanism for a module to associate some data with the handle \fIpamh\fR\&. Typically a module will call the \fBpam_set_data\fR function to register some data under a (hopefully) unique \fImodule_data_name\fR\&. The data is available for use by other modules too but \fInot\fR by an application\&. Since this functions stores only a pointer to the \fIdata\fR, the module should not modify or free the content of it\&. .PP The function \fBcleanup()\fR is associated with the \fIdata\fR and, if non\-NULL, it is called when this data is over\-written or following a call to \fBpam_end\fR(3)\&. .PP The \fIerror_status\fR argument is used to indicate to the module the sort of action it is to take in cleaning this data item\&. As an example, Kerberos creates a ticket file during the authentication phase, this file might be associated with a data item\&. When \fBpam_end\fR(3) is called by the module, the \fIerror_status\fR carries the return value of the \fBpam_authenticate\fR(3) or other \fIlibpam\fR function as appropriate\&. Based on this value the Kerberos module may choose to delete the ticket file (\fIauthentication failure\fR) or leave it in place\&. .PP The \fIerror_status\fR may have been logically OR\*(Aqd with either of the following two values: .PP PAM_DATA_REPLACE .RS 4 When a data item is being replaced (through a second call to \fBpam_set_data\fR) this mask is used\&. Otherwise, the call is assumed to be from \fBpam_end\fR(3)\&. .RE .PP PAM_DATA_SILENT .RS 4 Which indicates that the process would prefer to perform the \fBcleanup()\fR quietly\&. That is, discourages logging/messages to the user\&. .RE .SH "RETURN VALUES" .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_SUCCESS .RS 4 Data was successful stored\&. .RE .PP PAM_SYSTEM_ERR .RS 4 A NULL pointer was submitted as PAM handle or the function was called by an application\&. .RE .SH "SEE ALSO" .PP \fBpam_end\fR(3), \fBpam_get_data\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/man/pam_get_item.3.xml0000644000000000000000000001017112160065211014751 00000000000000 --> ]> pam_get_item 3 Linux-PAM Manual pam_get_item getting PAM informations #include <security/pam_modules.h> int pam_get_item const pam_handle_t *pamh int item_type const void **item DESCRIPTION The pam_get_item function allows applications and PAM service modules to access and retrieve PAM informations of item_type. Upon successful return, item contains a pointer to the value of the corresponding item. Note, this is a pointer to the actual data and should not be free()'ed or over-written! The following values are supported for item_type: The following additional items are specific to Linux-PAM and should not be used in portable applications: If a service module wishes to obtain the name of the user, it should not use this function, but instead perform a call to pam_get_user3 . Only a service module is privileged to read the authentication tokens, PAM_AUTHTOK and PAM_OLDAUTHTOK. RETURN VALUES PAM_BAD_ITEM The application attempted to set an undefined or inaccessible item. PAM_BUF_ERR Memory buffer error. PAM_PERM_DENIED The value of item was NULL. PAM_SUCCESS Data was successful updated. PAM_SYSTEM_ERR The pam_handle_t passed as first argument was invalid. SEE ALSO pam_set_item3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam.30000644000000000000000000001616712216527621012322 00000000000000'\" t .\" Title: pam .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam \- Pluggable Authentication Modules Library .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .sp .ft B .nf #include .fi .ft .sp .ft B .nf #include .fi .ft .SH "DESCRIPTION" .PP \fBPAM\fR is a system of libraries that handle the authentication tasks of applications (services) on the system\&. The library provides a stable general interface (Application Programming Interface \- API) that privilege granting programs (such as \fBlogin\fR(1) and \fBsu\fR(1)) defer to to perform standard authentication tasks\&. .SS "Initialization and Cleanup" .PP The \fBpam_start\fR(3) function creates the PAM context and initiates the PAM transaction\&. It is the first of the PAM functions that needs to be called by an application\&. The transaction state is contained entirely within the structure identified by this handle, so it is possible to have multiple transactions in parallel\&. But it is not possible to use the same handle for different transactions, a new one is needed for every new context\&. .PP The \fBpam_end\fR(3) function terminates the PAM transaction and is the last function an application should call in the PAM context\&. Upon return the handle pamh is no longer valid and all memory associated with it will be invalid\&. It can be called at any time to terminate a PAM transaction\&. .SS "Authentication" .PP The \fBpam_authenticate\fR(3) function is used to authenticate the user\&. The user is required to provide an authentication token depending upon the authentication service, usually this is a password, but could also be a finger print\&. .PP The \fBpam_setcred\fR(3) function manages the userscredentials\&. .SS "Account Management" .PP The \fBpam_acct_mgmt\fR(3) function is used to determine if the users account is valid\&. It checks for authentication token and account expiration and verifies access restrictions\&. It is typically called after the user has been authenticated\&. .SS "Password Management" .PP The \fBpam_chauthtok\fR(3) function is used to change the authentication token for a given user on request or because the token has expired\&. .SS "Session Management" .PP The \fBpam_open_session\fR(3) function sets up a user session for a previously successful authenticated user\&. The session should later be terminated with a call to \fBpam_close_session\fR(3)\&. .SS "Conversation" .PP The PAM library uses an application\-defined callback to allow a direct communication between a loaded module and the application\&. This callback is specified by the \fIstruct pam_conv\fR passed to \fBpam_start\fR(3) at the start of the transaction\&. See \fBpam_conv\fR(3) for details\&. .SS "Data Objects" .PP The \fBpam_set_item\fR(3) and \fBpam_get_item\fR(3) functions allows applications and PAM service modules to set and retrieve PAM informations\&. .PP The \fBpam_get_user\fR(3) function is the preferred method to obtain the username\&. .PP The \fBpam_set_data\fR(3) and \fBpam_get_data\fR(3) functions allows PAM service modules to set and retrieve free\-form data from one invocation to another\&. .SS "Environment and Error Management" .PP The \fBpam_putenv\fR(3), \fBpam_getenv\fR(3) and \fBpam_getenvlist\fR(3) functions are for maintaining a set of private environment variables\&. .PP The \fBpam_strerror\fR(3) function returns a pointer to a string describing the given PAM error code\&. .SH "RETURN VALUES" .PP The following return codes are known by PAM: .PP PAM_ABORT .RS 4 Critical error, immediate abort\&. .RE .PP PAM_ACCT_EXPIRED .RS 4 User account has expired\&. .RE .PP PAM_AUTHINFO_UNAVAIL .RS 4 Authentication service cannot retrieve authentication info\&. .RE .PP PAM_AUTHTOK_DISABLE_AGING .RS 4 Authentication token aging disabled\&. .RE .PP PAM_AUTHTOK_ERR .RS 4 Authentication token manipulation error\&. .RE .PP PAM_AUTHTOK_EXPIRED .RS 4 Authentication token expired\&. .RE .PP PAM_AUTHTOK_LOCK_BUSY .RS 4 Authentication token lock busy\&. .RE .PP PAM_AUTHTOK_RECOVERY_ERR .RS 4 Authentication information cannot be recovered\&. .RE .PP PAM_AUTH_ERR .RS 4 Authentication failure\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_CONV_ERR .RS 4 Conversation failure\&. .RE .PP PAM_CRED_ERR .RS 4 Failure setting user credentials\&. .RE .PP PAM_CRED_EXPIRED .RS 4 User credentials expired\&. .RE .PP PAM_CRED_INSUFFICIENT .RS 4 Insufficient credentials to access authentication data\&. .RE .PP PAM_CRED_UNAVAIL .RS 4 Authentication service cannot retrieve user credentials\&. .RE .PP PAM_IGNORE .RS 4 The return value should be ignored by PAM dispatch\&. .RE .PP PAM_MAXTRIES .RS 4 Have exhausted maximum number of retries for service\&. .RE .PP PAM_MODULE_UNKNOWN .RS 4 Module is unknown\&. .RE .PP PAM_NEW_AUTHTOK_REQD .RS 4 Authentication token is no longer valid; new one required\&. .RE .PP PAM_NO_MODULE_DATA .RS 4 No module specific data is present\&. .RE .PP PAM_OPEN_ERR .RS 4 Failed to load module\&. .RE .PP PAM_PERM_DENIED .RS 4 Permission denied\&. .RE .PP PAM_SERVICE_ERR .RS 4 Error in service module\&. .RE .PP PAM_SESSION_ERR .RS 4 Cannot make/remove an entry for the specified session\&. .RE .PP PAM_SUCCESS .RS 4 Success\&. .RE .PP PAM_SYMBOL_ERR .RS 4 Symbol not found\&. .RE .PP PAM_SYSTEM_ERR .RS 4 System error\&. .RE .PP PAM_TRY_AGAIN .RS 4 Failed preliminary check by password service\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known to the underlying authentication module\&. .RE .SH "SEE ALSO" .PP \fBpam_acct_mgmt\fR(3), \fBpam_authenticate\fR(3), \fBpam_chauthtok\fR(3), \fBpam_close_session\fR(3), \fBpam_conv\fR(3), \fBpam_end\fR(3), \fBpam_get_data\fR(3), \fBpam_getenv\fR(3), \fBpam_getenvlist\fR(3), \fBpam_get_item\fR(3), \fBpam_get_user\fR(3), \fBpam_open_session\fR(3), \fBpam_putenv\fR(3), \fBpam_set_data\fR(3), \fBpam_set_item\fR(3), \fBpam_setcred\fR(3), \fBpam_start\fR(3), \fBpam_strerror\fR(3) .SH "NOTES" .PP The \fIlibpam\fR interfaces are only thread\-safe if each thread within the multithreaded application uses its own PAM handle\&. Linux-PAM-1.1.8/doc/man/pam.conf-desc.xml0000644000000000000000000000173112160065211014575 00000000000000
When a PAM aware privilege granting application is started, it activates its attachment to the PAM-API. This activation performs a number of tasks, the most important being the reading of the configuration file(s): /etc/pam.conf. Alternatively, this may be the contents of the /etc/pam.d/ directory. The presence of this directory will cause Linux-PAM to ignore /etc/pam.conf. These files list the PAMs that will do the authentication tasks required by this service, and the appropriate behavior of the PAM-API in the event that individual PAMs fail.
Linux-PAM-1.1.8/doc/man/pam_sm_chauthtok.30000644000000000000000000001046512216527631015067 00000000000000'\" t .\" Title: pam_sm_chauthtok .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SM_CHAUTHTOK" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_sm_chauthtok \- PAM service function for authentication token management .SH "SYNOPSIS" .sp .ft B .nf #define PAM_SM_PASSWORD .fi .ft .sp .ft B .nf #include .fi .ft .HP \w'PAM_EXTERN\ int\ pam_sm_chauthtok('u .BI "PAM_EXTERN int pam_sm_chauthtok(pam_handle_t\ *" "pamh" ", int\ " "flags" ", int\ " "argc" ", const\ char\ **" "argv" ");" .SH "DESCRIPTION" .PP The \fBpam_sm_chauthtok\fR function is the service module\*(Aqs implementation of the \fBpam_chauthtok\fR(3) interface\&. .PP This function is used to (re\-)set the authentication token of the user\&. .PP Valid flags, which may be logically OR\*(Aqd with \fIPAM_SILENT\fR, are: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .PP PAM_CHANGE_EXPIRED_AUTHTOK .RS 4 This argument indicates to the module that the users authentication token (password) should only be changed if it has expired\&. This flag is optional and \fImust\fR be combined with one of the following two flags\&. Note, however, the following two options are \fImutually exclusive\fR\&. .RE .PP PAM_PRELIM_CHECK .RS 4 This indicates that the modules are being probed as to their ready status for altering the user\*(Aqs authentication token\&. If the module requires access to another system over some network it should attempt to verify it can connect to this system on receiving this flag\&. If a module cannot establish it is ready to update the user\*(Aqs authentication token it should return \fBPAM_TRY_AGAIN\fR, this information will be passed back to the application\&. .sp If the control value \fIsufficient\fR is used in the password stack, the \fIPAM_PRELIM_CHECK\fR section of the modules following that control value is not always executed\&. .RE .PP PAM_UPDATE_AUTHTOK .RS 4 This informs the module that this is the call it should change the authorization tokens\&. If the flag is logically OR\*(Aqd with \fBPAM_CHANGE_EXPIRED_AUTHTOK\fR, the token is only changed if it has actually expired\&. .RE .PP The PAM library calls this function twice in succession\&. The first time with \fBPAM_PRELIM_CHECK\fR and then, if the module does not return \fBPAM_TRY_AGAIN\fR, subsequently with \fBPAM_UPDATE_AUTHTOK\fR\&. It is only on the second call that the authorization token is (possibly) changed\&. .SH "RETURN VALUES" .PP PAM_AUTHTOK_ERR .RS 4 The module was unable to obtain the new authentication token\&. .RE .PP PAM_AUTHTOK_RECOVERY_ERR .RS 4 The module was unable to obtain the old authentication token\&. .RE .PP PAM_AUTHTOK_LOCK_BUSY .RS 4 Cannot change the authentication token since it is currently locked\&. .RE .PP PAM_AUTHTOK_DISABLE_AGING .RS 4 Authentication token aging has been disabled\&. .RE .PP PAM_PERM_DENIED .RS 4 Permission denied\&. .RE .PP PAM_TRY_AGAIN .RS 4 Preliminary check was unsuccessful\&. Signals an immediate return to the application is desired\&. .RE .PP PAM_SUCCESS .RS 4 The authentication token was successfully updated\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User unknown to password service\&. .RE .SH "SEE ALSO" .PP \fBpam\fR(3), \fBpam_chauthtok\fR(3), \fBpam_sm_chauthtok\fR(3), \fBpam_strerror\fR(3), \fBPAM\fR(8) Linux-PAM-1.1.8/doc/man/pam_chauthtok.3.xml0000644000000000000000000001205612160065211015152 00000000000000 pam_chauthtok 3 Linux-PAM Manual pam_chauthtok updating authentication tokens #include <security/pam_appl.h> int pam_chauthtok pam_handle_t *pamh int flags DESCRIPTION The pam_chauthtok function is used to change the authentication token for a given user (as indicated by the state associated with the handle pamh). The pamh argument is an authentication handle obtained by a prior call to pam_start(). The flags argument is the binary or of zero or more of the following values: PAM_SILENT Do not emit any messages. PAM_CHANGE_EXPIRED_AUTHTOK This argument indicates to the modules that the users authentication token (password) should only be changed if it has expired. If this argument is not passed, the application requires that all authentication tokens are to be changed. RETURN VALUES PAM_AUTHTOK_ERR A module was unable to obtain the new authentication token. PAM_AUTHTOK_RECOVERY_ERR A module was unable to obtain the old authentication token. PAM_AUTHTOK_LOCK_BUSY One or more of the modules was unable to change the authentication token since it is currently locked. PAM_AUTHTOK_DISABLE_AGING Authentication token aging has been disabled for at least one of the modules. PAM_PERM_DENIED Permission denied. PAM_SUCCESS The authentication token was successfully updated. PAM_TRY_AGAIN Not all of the modules were in a position to update the authentication token(s). In such a case none of the user's authentication tokens are updated. PAM_USER_UNKNOWN User unknown to password service. SEE ALSO pam_start3 , pam_authenticate3 , pam_setcred3 , pam_get_item3 , pam_strerror3 , pam8 Linux-PAM-1.1.8/doc/man/Makefile.am0000644000000000000000000000435712160065211013501 00000000000000# # Copyright (c) 2006, 2007 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) EXTRA_DIST = $(MANS) $(XMLS) man_MANS = pam.3 PAM.8 pam.8 pam.conf.5 pam.d.5 \ pam_acct_mgmt.3 pam_authenticate.3 \ pam_chauthtok.3 pam_close_session.3 pam_conv.3 \ pam_end.3 pam_error.3 \ pam_fail_delay.3 pam_xauth_data.3 \ pam_get_authtok.3 pam_get_authtok_noverify.3 pam_get_authtok_verify.3 \ pam_get_data.3 pam_get_item.3 pam_get_user.3 \ pam_getenv.3 pam_getenvlist.3 \ pam_info.3 \ pam_open_session.3 \ pam_prompt.3 pam_putenv.3 \ pam_set_data.3 pam_set_item.3 pam_syslog.3 \ pam_setcred.3 pam_sm_acct_mgmt.3 pam_sm_authenticate.3 \ pam_sm_close_session.3 pam_sm_open_session.3 pam_sm_setcred.3 \ pam_sm_chauthtok.3 pam_start.3 pam_strerror.3 \ pam_verror.3 pam_vinfo.3 pam_vprompt.3 pam_vsyslog.3 \ misc_conv.3 pam_misc_paste_env.3 pam_misc_drop_env.3 \ pam_misc_setenv.3 XMLS = pam.3.xml pam.8.xml \ pam_acct_mgmt.3.xml pam_authenticate.3.xml \ pam_chauthtok.3.xml pam_close_session.3.xml pam_conv.3.xml \ pam_end.3.xml pam_error.3.xml \ pam_fail_delay.3.xml pam_xauth_data.3 \ pam_get_authtok.3.xml pam_get_data.3.xml pam_get_item.3.xml \ pam_get_user.3.xml pam_getenv.3.xml pam_getenvlist.3.xml \ pam_info.3.xml \ pam_open_session.3.xml \ pam_prompt.3.xml pam_putenv.3.xml \ pam_set_data.3.xml pam_set_item.3.xml pam_syslog.3.xml \ pam_setcred.3.xml pam_sm_acct_mgmt.3.xml pam_sm_authenticate.3.xml \ pam_sm_close_session.3.xml pam_sm_open_session.3.xml \ pam_sm_setcred.3.xml pam_start.3.xml pam_strerror.3.xml \ pam_sm_chauthtok.3.xml \ pam_item_types_std.inc.xml pam_item_types_ext.inc.xml \ pam.conf-desc.xml pam.conf-dir.xml pam.conf-syntax.xml \ misc_conv.3.xml pam_misc_paste_env.3.xml pam_misc_drop_env.3.xml \ pam_misc_setenv.3.xml if ENABLE_REGENERATE_MAN PAM.8: pam.8 pam_get_authtok_noverify.3: pam_get_authtok.3 pam_get_authtok_verify.3: pam_get_authtok.3 pam.d.5: pam.conf.5 test -f $(srcdir)/pam\\.d.5 && mv $(srcdir)/pam\\.d.5 $(srcdir)/pam.d.5 ||: pam_get_item.3: pam_item_types_std.inc.xml pam_item_types_ext.inc.xml pam_set_data.3: pam_item_types_std.inc.xml pam_item_types_ext.inc.xml pam.conf.5: pam.conf-desc.xml pam.conf-dir.xml pam.conf-syntax.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/doc/man/pam_info.3.xml0000644000000000000000000000634012160065211014112 00000000000000 pam_info 3 Linux-PAM Manual pam_info pam_vinfo display messages to the user #include <security/pam_ext.h> int pam_info pam_handle_t *pamh const char *fmt ... int pam_vinfo pam_handle_t *pamh const char *fmt va_list args DESCRIPTION The pam_info function prints messages through the conversation function to the user. The pam_vinfo function performs the same task as pam_info() with the difference that it takes a set of arguments which have been obtained using the stdarg3 variable argument list macros. RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_CONV_ERR Conversation failure. PAM_SUCCESS Transaction was successful created. PAM_SYSTEM_ERR System error. SEE ALSO pam8 STANDARDS The pam_info and pam_vinfo functions are Linux-PAM extensions. Linux-PAM-1.1.8/doc/man/pam_verror.30000644000000000000000000000002012216527624013701 00000000000000.so pam_error.3 Linux-PAM-1.1.8/doc/man/pam_getenvlist.30000644000000000000000000000503312216527625014560 00000000000000'\" t .\" Title: pam_getenvlist .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_GETENVLIST" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_getenvlist \- getting the PAM environment .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'char\ **pam_getenvlist('u .BI "char **pam_getenvlist(pam_handle_t\ *" "pamh" ");" .SH "DESCRIPTION" .PP The \fBpam_getenvlist\fR function returns a complete copy of the PAM environment as associated with the handle \fIpamh\fR\&. The PAM environment variables represent the contents of the regular environment variables of the authenticated user when service is granted\&. .PP The format of the memory is a malloc()\*(Aqd array of char pointers, the last element of which is set to NULL\&. Each of the non\-NULL entries in this array point to a NUL terminated and malloc()\*(Aqd char string of the form: "\fIname=value\fR"\&. .PP It should be noted that this memory will never be free()\*(Aqd by libpam\&. Once obtained by a call to \fBpam_getenvlist\fR, it is the responsibility of the calling application to free() this memory\&. .PP It is by design, and not a coincidence, that the format and contents of the returned array matches that required for the third argument of the \fBexecle\fR(3) function call\&. .SH "RETURN VALUES" .PP The \fBpam_getenvlist\fR function returns NULL on failure\&. .SH "SEE ALSO" .PP \fBpam_start\fR(3), \fBpam_getenv\fR(3), \fBpam_putenv\fR(3), \fBpam\fR(8) Linux-PAM-1.1.8/doc/man/pam_error.3.xml0000644000000000000000000000731412160065211014312 00000000000000 pam_error 3 Linux-PAM Manual pam_error pam_verror display error messages to the user #include <security/pam_ext.h> int pam_error pam_handle_t *pamh const char *fmt ... int pam_verror pam_handle_t *pamh const char *fmt va_list args DESCRIPTION The pam_error function prints error messages through the conversation function to the user. The pam_verror function performs the same task as pam_error() with the difference that it takes a set of arguments which have been obtained using the stdarg3 variable argument list macros. RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_CONV_ERR Conversation failure. PAM_SUCCESS Error message was displayed. PAM_SYSTEM_ERR System error. SEE ALSO pam_info3 , pam_vinfo3 , pam_prompt3 , pam_vprompt3 , pam8 STANDARDS The pam_error and pam_verror functions are Linux-PAM extensions. Linux-PAM-1.1.8/doc/man/pam_acct_mgmt.3.xml0000644000000000000000000001100112160065211015103 00000000000000 pam_acct_mgmt 3 Linux-PAM Manual pam_acct_mgmt PAM account validation management #include <security/pam_appl.h> int pam_acct_mgmt pam_handle_t *pamh int flags DESCRIPTION The pam_acct_mgmt function is used to determine if the users account is valid. It checks for authentication token and account expiration and verifies access restrictions. It is typically called after the user has been authenticated. The pamh argument is an authentication handle obtained by a prior call to pam_start(). The flags argument is the binary or of zero or more of the following values: PAM_SILENT Do not emit any messages. PAM_DISALLOW_NULL_AUTHTOK The PAM module service should return PAM_NEW_AUTHTOK_REQD if the user has a null authentication token. RETURN VALUES PAM_ACCT_EXPIRED User account has expired. PAM_AUTH_ERR Authentication failure. PAM_NEW_AUTHTOK_REQD The user account is valid but their authentication token is expired. The correct response to this return-value is to require that the user satisfies the pam_chauthtok() function before obtaining service. It may not be possible for some applications to do this. In such cases, the user should be denied access until such time as they can update their password. PAM_PERM_DENIED Permission denied. PAM_SUCCESS The authentication token was successfully updated. PAM_USER_UNKNOWN User unknown to password service. SEE ALSO pam_start3 , pam_authenticate3 , pam_chauthtok3 , pam_strerror3 , pam8 Linux-PAM-1.1.8/doc/man/pam_getenv.30000644000000000000000000000367712216527625013700 00000000000000'\" t .\" Title: pam_getenv .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_GETENV" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_getenv \- get a PAM environment variable .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'const\ char\ *pam_getenv('u .BI "const char *pam_getenv(pam_handle_t\ *" "pamh" ", const\ char\ *" "name" ");" .SH "DESCRIPTION" .PP The \fBpam_getenv\fR function searches the PAM environment list as associated with the handle \fIpamh\fR for an item that matches the string pointed to by \fIname\fR and returns a pointer to the value of the environment variable\&. The application is not allowed to free the data\&. .SH "RETURN VALUES" .PP The \fBpam_getenv\fR function returns NULL on failure\&. .SH "SEE ALSO" .PP \fBpam_start\fR(3), \fBpam_getenvlist\fR(3), \fBpam_putenv\fR(3), \fBpam\fR(8) Linux-PAM-1.1.8/doc/man/pam_set_item.30000644000000000000000000001434312216527627014213 00000000000000'\" t .\" Title: pam_set_item .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SET_ITEM" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_set_item \- set and update PAM informations .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_set_item('u .BI "int pam_set_item(pam_handle_t\ *" "pamh" ", int\ " "item_type" ", const\ void\ *" "item" ");" .SH "DESCRIPTION" .PP The \fBpam_set_item\fR function allows applications and PAM service modules to access and to update PAM informations of \fIitem_type\fR\&. For this a copy of the object pointed to by the \fIitem\fR argument is created\&. The following \fIitem_type\fRs are supported: .PP PAM_SERVICE .RS 4 The service name (which identifies that PAM stack that the PAM functions will use to authenticate the program)\&. .RE .PP PAM_USER .RS 4 The username of the entity under whose identity service will be given\&. That is, following authentication, \fIPAM_USER\fR identifies the local entity that gets to use the service\&. Note, this value can be mapped from something (eg\&., "anonymous") to something else (eg\&. "guest119") by any module in the PAM stack\&. As such an application should consult the value of \fIPAM_USER\fR after each call to a PAM function\&. .RE .PP PAM_USER_PROMPT .RS 4 The string used when prompting for a user\*(Aqs name\&. The default value for this string is a localized version of "login: "\&. .RE .PP PAM_TTY .RS 4 The terminal name: prefixed by /dev/ if it is a device file; for graphical, X\-based, applications the value for this item should be the \fI$DISPLAY\fR variable\&. .RE .PP PAM_RUSER .RS 4 The requesting user name: local name for a locally requesting user or a remote user name for a remote requesting user\&. .sp Generally an application or module will attempt to supply the value that is most strongly authenticated (a local account before a remote one\&. The level of trust in this value is embodied in the actual authentication stack associated with the application, so it is ultimately at the discretion of the system administrator\&. .sp \fIPAM_RUSER@PAM_RHOST\fR should always identify the requesting user\&. In some cases, \fIPAM_RUSER\fR may be NULL\&. In such situations, it is unclear who the requesting entity is\&. .RE .PP PAM_RHOST .RS 4 The requesting hostname (the hostname of the machine from which the \fIPAM_RUSER\fR entity is requesting service)\&. That is \fIPAM_RUSER@PAM_RHOST\fR does identify the requesting user\&. In some applications, \fIPAM_RHOST\fR may be NULL\&. In such situations, it is unclear where the authentication request is originating from\&. .RE .PP PAM_AUTHTOK .RS 4 The authentication token (often a password)\&. This token should be ignored by all module functions besides \fBpam_sm_authenticate\fR(3) and \fBpam_sm_chauthtok\fR(3)\&. In the former function it is used to pass the most recent authentication token from one stacked module to another\&. In the latter function the token is used for another purpose\&. It contains the currently active authentication token\&. .RE .PP PAM_OLDAUTHTOK .RS 4 The old authentication token\&. This token should be ignored by all module functions except \fBpam_sm_chauthtok\fR(3)\&. .RE .PP PAM_CONV .RS 4 The pam_conv structure\&. See \fBpam_conv\fR(3)\&. .RE .PP The following additional items are specific to Linux\-PAM and should not be used in portable applications: .PP PAM_FAIL_DELAY .RS 4 A function pointer to redirect centrally managed failure delays\&. See \fBpam_fail_delay\fR(3)\&. .RE .PP PAM_XDISPLAY .RS 4 The name of the X display\&. For graphical, X\-based applications the value for this item should be the \fI$DISPLAY\fR variable\&. This value may be used independently of \fIPAM_TTY\fR for passing the name of the display\&. .RE .PP PAM_XAUTHDATA .RS 4 A pointer to a structure containing the X authentication data required to make a connection to the display specified by \fIPAM_XDISPLAY\fR, if such information is necessary\&. See \fBpam_xauth_data\fR(3)\&. .RE .PP PAM_AUTHTOK_TYPE .RS 4 The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: "\&. The example word \fIUNIX\fR can be replaced with this item, by default it is empty\&. This item is used by \fBpam_get_authtok\fR(3)\&. .RE .PP For all \fIitem_type\fRs, other than PAM_CONV and PAM_FAIL_DELAY, \fIitem\fR is a pointer to a terminated character string\&. In the case of PAM_CONV, \fIitem\fR points to an initialized \fIpam_conv\fR structure\&. In the case of PAM_FAIL_DELAY, \fIitem\fR is a function pointer: \fBvoid (*delay_fn)(int retval, unsigned usec_delay, void *appdata_ptr)\fR .PP Both, PAM_AUTHTOK and PAM_OLDAUTHTOK, will be reseted before returning to the application\&. Which means an application is not able to access the authentication tokens\&. .SH "RETURN VALUES" .PP PAM_BAD_ITEM .RS 4 The application attempted to set an undefined or inaccessible item\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_SUCCESS .RS 4 Data was successful updated\&. .RE .PP PAM_SYSTEM_ERR .RS 4 The \fIpam_handle_t\fR passed as first argument was invalid\&. .RE .SH "SEE ALSO" .PP \fBpam_get_item\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/man/pam_conv.3.xml0000644000000000000000000001724012160065211014125 00000000000000 pam_conv 3 Linux-PAM Manual pam_conv PAM conversation function #include <security/pam_appl.h> struct pam_message { int msg_style; const char *msg; }; struct pam_response { char *resp; int resp_retcode; }; struct pam_conv { int (*conv)(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr); void *appdata_ptr; }; DESCRIPTION The PAM library uses an application-defined callback to allow a direct communication between a loaded module and the application. This callback is specified by the struct pam_conv passed to pam_start3 at the start of the transaction. When a module calls the referenced conv() function, the argument appdata_ptr is set to the second element of this structure. The other arguments of a call to conv() concern the information exchanged by module and application. That is to say, num_msg holds the length of the array of pointers, msg. After a successful return, the pointer resp points to an array of pam_response structures, holding the application supplied text. The resp_retcode member of this struct is unused and should be set to zero. It is the caller's responsibility to release both, this array and the responses themselves, using free3 . Note, *resp is a struct pam_response array and not an array of pointers. The number of responses is always equal to the num_msg conversation function argument. This does require that the response array is free3 'd after every call to the conversation function. The index of the responses corresponds directly to the prompt index in the pam_message array. On failure, the conversation function should release any resources it has allocated, and return one of the predefined PAM error codes. Each message can have one of four types, specified by the msg_style member of struct pam_message: PAM_PROMPT_ECHO_OFF Obtain a string without echoing any text. PAM_PROMPT_ECHO_ON Obtain a string whilst echoing text. PAM_ERROR_MSG Display an error message. PAM_TEXT_INFO Display some text. The point of having an array of messages is that it becomes possible to pass a number of things to the application in a single call from the module. It can also be convenient for the application that related things come at once: a windows based application can then present a single form with many messages/prompts on at once. In passing, it is worth noting that there is a descrepency between the way Linux-PAM handles the const struct pam_message **msg conversation function argument from the way that Solaris' PAM (and derivitives, known to include HP/UX, are there others?) does. Linux-PAM interprets the msg argument as entirely equivalent to the following prototype const struct pam_message *msg[] (which, in spirit, is consistent with the commonly used prototypes for argv argument to the familiar main() function: char **argv; and char *argv[]). Said another way Linux-PAM interprets the msg argument as a pointer to an array of num_msg read only 'struct pam_message' pointers. Solaris' PAM implementation interprets this argument as a pointer to a pointer to an array of num_msg pam_message structures. Fortunately, perhaps, for most module/application developers when num_msg has a value of one these two definitions are entirely equivalent. Unfortunately, casually raising this number to two has led to unanticipated compatibility problems. For what its worth the two known module writer work-arounds for trying to maintain source level compatibility with both PAM implementations are: never call the conversation function with num_msg greater than one. set up msg as doubly referenced so both types of conversation function can find the messages. That is, make msg[n] = & (( *msg )[n]) RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_CONV_ERR Conversation failure. The application should not set *resp. PAM_SUCCESS Success. SEE ALSO pam_start3 , pam_set_item3 , pam_get_item3 , pam_strerror3 , pam8 Linux-PAM-1.1.8/doc/man/pam_fail_delay.3.xml0000644000000000000000000001642112160065211015251 00000000000000 pam_fail_delay 3 Linux-PAM Manual pam_fail_delay request a delay on failure #include <security/pam_appl.h> int pam_fail_delay pam_handle_t *pamh unsigned int usec DESCRIPTION The pam_fail_delay function provides a mechanism by which an application or module can suggest a minimum delay of usec micro-seconds. The function keeps a record of the longest time requested with this function. Should pam_authenticate3 fail, the failing return to the application is delayed by an amount of time randomly distributed (by up to 25%) about this longest value. Independent of success, the delay time is reset to its zero default value when the PAM service module returns control to the application. The delay occurs after all authentication modules have been called, but before control is returned to the service application. When using this function the programmer should check if it is available with: #ifdef HAVE_PAM_FAIL_DELAY .... #endif /* HAVE_PAM_FAIL_DELAY */ For applications written with a single thread that are event driven in nature, generating this delay may be undesirable. Instead, the application may want to register the delay in some other way. For example, in a single threaded server that serves multiple authentication requests from a single event loop, the application might want to simply mark a given connection as blocked until an application timer expires. For this reason the delay function can be changed with the PAM_FAIL_DELAY item. It can be queried and set with pam_get_item3 and pam_set_item 3 respectively. The value used to set it should be a function pointer of the following prototype: void (*delay_fn)(int retval, unsigned usec_delay, void *appdata_ptr); The arguments being the retval return code of the module stack, the usec_delay micro-second delay that libpam is requesting and the appdata_ptr that the application has associated with the current pamh. This last value was set by the application when it called pam_start3 or explicitly with pam_set_item3 . Note, if PAM_FAIL_DELAY item is unset (or set to NULL), then no delay will be performed. RATIONALE It is often possible to attack an authentication scheme by exploiting the time it takes the scheme to deny access to an applicant user. In cases of short timeouts, it may prove possible to attempt a brute force dictionary attack -- with an automated process, the attacker tries all possible passwords to gain access to the system. In other cases, where individual failures can take measurable amounts of time (indicating the nature of the failure), an attacker can obtain useful information about the authentication process. These latter attacks make use of procedural delays that constitute a covert channel of useful information. To minimize the effectiveness of such attacks, it is desirable to introduce a random delay in a failed authentication process. Preferable this value should be set by the application or a special PAM module. Standard PAM modules should not modify the delay unconditional. EXAMPLE For example, a login application may require a failure delay of roughly 3 seconds. It will contain the following code: pam_fail_delay (pamh, 3000000 /* micro-seconds */ ); pam_authenticate (pamh, 0); if the modules do not request a delay, the failure delay will be between 2.25 and 3.75 seconds. However, the modules, invoked in the authentication process, may also request delays: module #1: pam_fail_delay (pamh, 2000000); module #2: pam_fail_delay (pamh, 4000000); in this case, it is the largest requested value that is used to compute the actual failed delay: here between 3 and 5 seconds. RETURN VALUES PAM_SUCCESS Delay was successful adjusted. PAM_SYSTEM_ERR A NULL pointer was submitted as PAM handle. SEE ALSO pam_start3 , pam_get_item3 , pam_strerror3 STANDARDS The pam_fail_delay function is an Linux-PAM extension. Linux-PAM-1.1.8/doc/man/pam_vsyslog.30000644000000000000000000000002112216527627014074 00000000000000.so pam_syslog.3 Linux-PAM-1.1.8/doc/man/pam_sm_setcred.3.xml0000644000000000000000000001431012160065211015303 00000000000000 pam_sm_setcred 3 Linux-PAM Manual pam_sm_setcred PAM service function to alter credentials #define PAM_SM_AUTH #include <security/pam_modules.h> PAM_EXTERN int pam_sm_setcred pam_handle_t *pamh int flags int argc const char **argv DESCRIPTION The pam_sm_setcred function is the service module's implementation of the pam_setcred3 interface. This function performs the task of altering the credentials of the user with respect to the corresponding authorization scheme. Generally, an authentication module may have access to more information about a user than their authentication token. This function is used to make such information available to the application. It should only be called after the user has been authenticated but before a session has been established. Valid flags, which may be logically OR'd with PAM_SILENT, are: PAM_SILENT Do not emit any messages. PAM_ESTABLISH_CRED Initialize the credentials for the user. PAM_DELETE_CRED Delete the credentials associated with the authentication service. PAM_REINITIALIZE_CRED Reinitialize the user credentials. PAM_REFRESH_CRED Extend the lifetime of the user credentials. The way the auth stack is navigated in order to evaluate the pam_setcred() function call, independent of the pam_sm_setcred() return codes, is exactly the same way that it was navigated when evaluating the pam_authenticate() library call. Typically, if a stack entry was ignored in evaluating pam_authenticate(), it will be ignored when libpam evaluates the pam_setcred() function call. Otherwise, the return codes from each module specific pam_sm_setcred() call are treated as required. RETURN VALUES PAM_CRED_UNAVAIL This module cannot retrieve the user's credentials. PAM_CRED_EXPIRED The user's credentials have expired. PAM_CRED_ERR This module was unable to set the credentials of the user. PAM_SUCCESS The user credential was successfully set. PAM_USER_UNKNOWN The user is not known to this authentication module. These, non-PAM_SUCCESS, return values will typically lead to the credential stack failing. The first such error will dominate in the return value of pam_setcred(). SEE ALSO pam3 , pam_authenticate3 , pam_setcred3 , pam_sm_authenticate3 , pam_strerror3 , PAM8 Linux-PAM-1.1.8/doc/man/pam_vprompt.30000644000000000000000000000002112216527626014074 00000000000000.so pam_prompt.3 Linux-PAM-1.1.8/doc/man/pam.8.xml0000644000000000000000000001563012160065211013106 00000000000000 pam 8 Linux-PAM Manual PAM pam Pluggable Authentication Modules for Linux DESCRIPTION This manual is intended to offer a quick introduction to Linux-PAM. For more information the reader is directed to the Linux-PAM system administrators' guide. Linux-PAM is a system of libraries that handle the authentication tasks of applications (services) on the system. The library provides a stable general interface (Application Programming Interface - API) that privilege granting programs (such as login1 and su1 ) defer to to perform standard authentication tasks. The principal feature of the PAM approach is that the nature of the authentication is dynamically configurable. In other words, the system administrator is free to choose how individual service-providing applications will authenticate users. This dynamic configuration is set by the contents of the single Linux-PAM configuration file /etc/pam.conf. Alternatively, the configuration can be set by individual configuration files located in the /etc/pam.d/ directory. The presence of this directory will cause Linux-PAM to ignore /etc/pam.conf. From the point of view of the system administrator, for whom this manual is provided, it is not of primary importance to understand the internal behavior of the Linux-PAM library. The important point to recognize is that the configuration file(s) define the connection between applications (services) and the pluggable authentication modules (PAMs) that perform the actual authentication tasks. Linux-PAM separates the tasks of authentication into four independent management groups: account management; authentication management; password management; and session management. (We highlight the abbreviations used for these groups in the configuration file.) Simply put, these groups take care of different aspects of a typical user's request for a restricted service: account - provide account verification types of service: has the user's password expired?; is this user permitted access to the requested service? authentication - authenticate a user and set up user credentials. Typically this is via some challenge-response request that the user must satisfy: if you are who you claim to be please enter your password. Not all authentications are of this type, there exist hardware based authentication schemes (such as the use of smart-cards and biometric devices), with suitable modules, these may be substituted seamlessly for more standard approaches to authentication - such is the flexibility of Linux-PAM. password - this group's responsibility is the task of updating authentication mechanisms. Typically, such services are strongly coupled to those of the auth group. Some authentication mechanisms lend themselves well to being updated with such a function. Standard UN*X password-based access is the obvious example: please enter a replacement password. session - this group of tasks cover things that should be done prior to a service being given and after it is withdrawn. Such tasks include the maintenance of audit trails and the mounting of the user's home directory. The session management group is important as it provides both an opening and closing hook for modules to affect the services available to a user. FILES /etc/pam.conf the configuration file /etc/pam.d the Linux-PAM configuration directory. Generally, if this directory is present, the /etc/pam.conf file is ignored. ERRORS Typically errors generated by the Linux-PAM system of libraries, will be written to syslog3 . CONFORMING TO DCE-RFC 86.0, October 1995. Contains additional features, but remains backwardly compatible with this RFC. SEE ALSO pam3 , pam_authenticate3 , pam_sm_setcred3 , pam_strerror3 , PAM8 Linux-PAM-1.1.8/doc/man/pam_get_authtok.30000644000000000000000000001255312216527624014716 00000000000000'\" t .\" Title: pam_get_authtok .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_GET_AUTHTOK" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_get_authtok, pam_get_authtok_verify, pam_get_authtok_noverify \- get authentication token .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_get_authtok('u .BI "int pam_get_authtok(pam_handle_t\ *" "pamh" ", int\ " "item" ", const\ char\ **" "authtok" ", const\ char\ *" "prompt" ");" .HP \w'int\ pam_get_authtok_noverify('u .BI "int pam_get_authtok_noverify(pam_handle_t\ *" "pamh" ", const\ char\ **" "authtok" ", const\ char\ *" "prompt" ");" .HP \w'int\ pam_get_authtok_verify('u .BI "int pam_get_authtok_verify(pam_handle_t\ *" "pamh" ", const\ char\ **" "authtok" ", const\ char\ *" "prompt" ");" .SH "DESCRIPTION" .PP The \fBpam_get_authtok\fR function returns the cached authentication token, or prompts the user if no token is currently cached\&. It is intended for internal use by Linux\-PAM and PAM service modules\&. Upon successful return, \fIauthtok\fR contains a pointer to the value of the authentication token\&. Note, this is a pointer to the \fIactual\fR data and should \fBnot\fR be \fIfree()\fR\*(Aqed or over\-written! .PP The \fIprompt\fR argument specifies a prompt to use if no token is cached\&. If a NULL pointer is given, \fBpam_get_authtok\fR uses pre\-defined prompts\&. .PP The following values are supported for \fIitem\fR: .PP PAM_AUTHTOK .RS 4 Returns the current authentication token\&. Called from \fBpam_sm_chauthtok\fR(3)\fBpam_get_authtok\fR will ask the user to confirm the new token by retyping it\&. If a prompt was specified, "Retype" will be used as prefix\&. .RE .PP PAM_OLDAUTHTOK .RS 4 Returns the previous authentication token when changing authentication tokens\&. .RE .PP The \fBpam_get_authtok_noverify\fR function can only be used for changing the password (from \fBpam_sm_chauthtok\fR(3))\&. It returns the cached authentication token, or prompts the user if no token is currently cached\&. The difference to \fBpam_get_authtok\fR is, that this function does not ask a second time for the password to verify it\&. Upon successful return, \fIauthtok\fR contains a pointer to the value of the authentication token\&. Note, this is a pointer to the \fIactual\fR data and should \fBnot\fR be \fIfree()\fR\*(Aqed or over\-written! .PP The \fBpam_get_authtok_verify\fR function can only be used to verify a password for mistypes gotten by \fBpam_get_authtok_noverify\fR(3)\&. This function asks a second time for the password and verify it with the password provided by \fIauthtok\fR argument\&. In case of an error, the value of \fIauthtok\fR is undefined\&. Else this argument will point to the \fIactual\fR data and should \fBnot\fR be \fIfree()\fR\*(Aqed or over\-written! .SH "OPTIONS" .PP \fBpam_get_authtok\fR honours the following module options: .PP \fBtry_first_pass\fR .RS 4 Before prompting the user for their password, the module first tries the previous stacked module\*(Aqs password in case that satisfies this module as well\&. .RE .PP \fBuse_first_pass\fR .RS 4 The argument \fBuse_first_pass\fR forces the module to use a previous stacked modules password and will never prompt the user \- if no password is available or the password is not appropriate, the user will be denied access\&. .RE .PP \fBuse_authtok\fR .RS 4 When password changing enforce the module to set the new token to the one provided by a previously stacked \fBpassword\fR module\&. If no token is available token changing will fail\&. .RE .PP \fBauthtok_type=\fR\fB\fIXXX\fR\fR .RS 4 The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: "\&. The example word \fIUNIX\fR can be replaced with this option, by default it is empty\&. .RE .SH "RETURN VALUES" .PP PAM_AUTH_ERR .RS 4 Authentication token could not be retrieved\&. .RE .PP PAM_AUTHTOK_ERR .RS 4 New authentication could not be retrieved\&. .RE .PP PAM_SUCCESS .RS 4 Authentication token was successfully retrieved\&. .RE .PP PAM_SYSTEM_ERR .RS 4 No space for an authentication token was provided\&. .RE .PP PAM_TRY_AGAIN .RS 4 New authentication tokens mismatch\&. .RE .SH "SEE ALSO" .PP \fBpam\fR(8) .SH "STANDARDS" .PP The \fBpam_get_authtok\fR function is a Linux\-PAM extensions\&. Linux-PAM-1.1.8/doc/man/pam_sm_authenticate.3.xml0000644000000000000000000001153412160065211016335 00000000000000 pam_sm_authenticate 3 Linux-PAM Manual pam_sm_authenticate PAM service function for user authentication #define PAM_SM_AUTH #include <security/pam_modules.h> PAM_EXTERN int pam_sm_authenticate pam_handle_t *pamh int flags int argc const char **argv DESCRIPTION The pam_sm_authenticate function is the service module's implementation of the pam_authenticate3 interface. This function performs the task of authenticating the user. Valid flags, which may be logically OR'd with PAM_SILENT, are: PAM_SILENT Do not emit any messages. PAM_DISALLOW_NULL_AUTHTOK Return PAM_AUTH_ERR if the database of authentication tokens for this authentication mechanism has a NULL entry for the user. Without this flag, such a NULL token will lead to a success without the user being prompted. RETURN VALUES PAM_AUTH_ERR Authentication failure. PAM_CRED_INSUFFICIENT For some reason the application does not have sufficient credentials to authenticate the user. PAM_AUTHINFO_UNAVAIL The modules were not able to access the authentication information. This might be due to a network or hardware failure etc. PAM_SUCCESS The authentication token was successfully updated. PAM_USER_UNKNOWN The supplied username is not known to the authentication service. PAM_MAXTRIES One or more of the authentication modules has reached its limit of tries authenticating the user. Do not try again. SEE ALSO pam3 , pam_authenticate3 , pam_sm_setcred3 , pam_strerror3 , PAM8 Linux-PAM-1.1.8/doc/man/pam_getenvlist.3.xml0000644000000000000000000000572312160065211015347 00000000000000 pam_getenvlist 3 Linux-PAM Manual pam_getenvlist getting the PAM environment #include <security/pam_appl.h> char **pam_getenvlist pam_handle_t *pamh DESCRIPTION The pam_getenvlist function returns a complete copy of the PAM environment as associated with the handle pamh. The PAM environment variables represent the contents of the regular environment variables of the authenticated user when service is granted. The format of the memory is a malloc()'d array of char pointers, the last element of which is set to NULL. Each of the non-NULL entries in this array point to a NUL terminated and malloc()'d char string of the form: "name=value". It should be noted that this memory will never be free()'d by libpam. Once obtained by a call to pam_getenvlist, it is the responsibility of the calling application to free() this memory. It is by design, and not a coincidence, that the format and contents of the returned array matches that required for the third argument of the execle3 function call. RETURN VALUES The pam_getenvlist function returns NULL on failure. SEE ALSO pam_start3 , pam_getenv3 , pam_putenv3 , pam8 Linux-PAM-1.1.8/doc/man/pam.conf-dir.xml0000644000000000000000000000226112160065211014434 00000000000000
More flexible than the single configuration file is it to configure libpam via the contents of the /etc/pam.d/ directory. In this case the directory is filled with files each of which has a filename equal to a service-name (in lower-case): it is the personal configuration file for the named service. The syntax of each file in /etc/pam.d/ is similar to that of the /etc/pam.conf file and is made up of lines of the following form: type control module-path module-arguments The only difference being that the service-name is not present. The service-name is of course the name of the given configuration file. For example, /etc/pam.d/login contains the configuration for the login service.
Linux-PAM-1.1.8/doc/man/pam_get_authtok.3.xml0000644000000000000000000002126512160065211015500 00000000000000 pam_get_authtok 3 Linux-PAM Manual pam_get_authtok pam_get_authtok_verify pam_get_authtok_noverify get authentication token #include <security/pam_ext.h> int pam_get_authtok pam_handle_t *pamh int item const char **authtok const char *prompt int pam_get_authtok_noverify pam_handle_t *pamh const char **authtok const char *prompt int pam_get_authtok_verify pam_handle_t *pamh const char **authtok const char *prompt DESCRIPTION The pam_get_authtok function returns the cached authentication token, or prompts the user if no token is currently cached. It is intended for internal use by Linux-PAM and PAM service modules. Upon successful return, authtok contains a pointer to the value of the authentication token. Note, this is a pointer to the actual data and should not be free()'ed or over-written! The prompt argument specifies a prompt to use if no token is cached. If a NULL pointer is given, pam_get_authtok uses pre-defined prompts. The following values are supported for item: PAM_AUTHTOK Returns the current authentication token. Called from pam_sm_chauthtok3 pam_get_authtok will ask the user to confirm the new token by retyping it. If a prompt was specified, "Retype" will be used as prefix. PAM_OLDAUTHTOK Returns the previous authentication token when changing authentication tokens. The pam_get_authtok_noverify function can only be used for changing the password (from pam_sm_chauthtok3 ). It returns the cached authentication token, or prompts the user if no token is currently cached. The difference to pam_get_authtok is, that this function does not ask a second time for the password to verify it. Upon successful return, authtok contains a pointer to the value of the authentication token. Note, this is a pointer to the actual data and should not be free()'ed or over-written! The pam_get_authtok_verify function can only be used to verify a password for mistypes gotten by pam_get_authtok_noverify3 . This function asks a second time for the password and verify it with the password provided by authtok argument. In case of an error, the value of authtok is undefined. Else this argument will point to the actual data and should not be free()'ed or over-written! OPTIONS pam_get_authtok honours the following module options: Before prompting the user for their password, the module first tries the previous stacked module's password in case that satisfies this module as well. The argument forces the module to use a previous stacked modules password and will never prompt the user - if no password is available or the password is not appropriate, the user will be denied access. When password changing enforce the module to set the new token to the one provided by a previously stacked module. If no token is available token changing will fail. The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: ". The example word UNIX can be replaced with this option, by default it is empty. RETURN VALUES PAM_AUTH_ERR Authentication token could not be retrieved. PAM_AUTHTOK_ERR New authentication could not be retrieved. PAM_SUCCESS Authentication token was successfully retrieved. PAM_SYSTEM_ERR No space for an authentication token was provided. PAM_TRY_AGAIN New authentication tokens mismatch. SEE ALSO pam8 STANDARDS The pam_get_authtok function is a Linux-PAM extensions. Linux-PAM-1.1.8/doc/man/pam_xauth_data.30000644000000000000000000000542212216527624014517 00000000000000'\" t .\" Title: pam_xauth_data .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_XAUTH_DATA" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_xauth_data \- structure containing X authentication data .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .sp .nf struct pam_xauth_data { int namelen; char *name; int datalen; char *data; }; .fi .SH "DESCRIPTION" .PP The \fBpam_xauth_data\fR structure contains X authentication data used to make a connection to an X display\&. Using this mechanism, an application can communicate X authentication data to PAM service modules\&. This allows modules to make a connection to the user\*(Aqs X display in order to label the user\*(Aqs session on login, display visual feedback or for other purposes\&. .PP The \fIname\fR field contains the name of the authentication method, such as "MIT\-MAGIC\-COOKIE\-1"\&. The \fInamelen\fR field contains the length of this string, not including the trailing NUL character\&. .PP The \fIdata\fR field contains the authentication method\-specific data corresponding to the specified name\&. The \fIdatalen\fR field contains its length in bytes\&. .PP The X authentication data can be changed with the \fIPAM_XAUTH_DATA\fR item\&. It can be queried and set with \fBpam_get_item\fR(3) and \fBpam_set_item \fR(3) respectively\&. The value used to set it should be a pointer to a pam_xauth_data structure\&. An internal copy of both the structure itself and its fields is made by PAM when setting the item\&. .SH "SEE ALSO" .PP \fBpam_start\fR(3), \fBpam_get_item\fR(3), .SH "STANDARDS" .PP The \fBpam_xauth_data\fR structure and \fIPAM_XAUTH_DATA\fR item are Linux\-PAM extensions\&. Linux-PAM-1.1.8/doc/man/pam_info.30000644000000000000000000000437612216527626013341 00000000000000'\" t .\" Title: pam_info .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_INFO" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_info, pam_vinfo \- display messages to the user .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_info('u .BI "int pam_info(pam_handle_t\ *" "pamh" ", const\ char\ *" "fmt" ", " "\&.\&.\&." ");" .HP \w'int\ pam_vinfo('u .BI "int pam_vinfo(pam_handle_t\ *" "pamh" ", const\ char\ *" "fmt" ", va_list\ " "args" ");" .SH "DESCRIPTION" .PP The \fBpam_info\fR function prints messages through the conversation function to the user\&. .PP The \fBpam_vinfo\fR function performs the same task as \fBpam_info()\fR with the difference that it takes a set of arguments which have been obtained using the \fBstdarg\fR(3) variable argument list macros\&. .SH "RETURN VALUES" .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_CONV_ERR .RS 4 Conversation failure\&. .RE .PP PAM_SUCCESS .RS 4 Transaction was successful created\&. .RE .PP PAM_SYSTEM_ERR .RS 4 System error\&. .RE .SH "SEE ALSO" .PP \fBpam\fR(8) .SH "STANDARDS" .PP The \fBpam_info\fR and \fBpam_vinfo\fR functions are Linux\-PAM extensions\&. Linux-PAM-1.1.8/doc/man/pam_setcred.3.xml0000644000000000000000000001332112160065211014605 00000000000000 pam_setcred 3 Linux-PAM Manual pam_setcred establish / delete user credentials #include <security/pam_appl.h> int pam_setcred pam_handle_t *pamh int flags DESCRIPTION The pam_setcred function is used to establish, maintain and delete the credentials of a user. It should be called to set the credentials after a user has been authenticated and before a session is opened for the user (with pam_open_session3 ). The credentials should be deleted after the session has been closed (with pam_close_session3 ). A credential is something that the user possesses. It is some property, such as a Kerberos ticket, or a supplementary group membership that make up the uniqueness of a given user. On a Linux system the user's UID and GID's are credentials too. However, it has been decided that these properties (along with the default supplementary groups of which the user is a member) are credentials that should be set directly by the application and not by PAM. Such credentials should be established, by the application, prior to a call to this function. For example, initgroups2 (or equivalent) should have been performed. Valid flags, any one of which, may be logically OR'd with , are: PAM_ESTABLISH_CRED Initialize the credentials for the user. PAM_DELETE_CRED Delete the user's credentials. PAM_REINITIALIZE_CRED Fully reinitialize the user's credentials. PAM_REFRESH_CRED Extend the lifetime of the existing credentials. RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_CRED_ERR Failed to set user credentials. PAM_CRED_EXPIRED User credentials are expired. PAM_CRED_UNAVAIL Failed to retrieve user credentials. PAM_SUCCESS Data was successful stored. PAM_SYSTEM_ERR A NULL pointer was submitted as PAM handle, the function was called by a module or another system error occured. PAM_USER_UNKNOWN User is not known to an authentication module. SEE ALSO pam_authenticate3 , pam_open_session3 , pam_close_session3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam_item_types_ext.inc.xml0000644000000000000000000000401212160065211016622 00000000000000 PAM_FAIL_DELAY A function pointer to redirect centrally managed failure delays. See pam_fail_delay3 . PAM_XDISPLAY The name of the X display. For graphical, X-based applications the value for this item should be the $DISPLAY variable. This value may be used independently of PAM_TTY for passing the name of the display. PAM_XAUTHDATA A pointer to a structure containing the X authentication data required to make a connection to the display specified by PAM_XDISPLAY, if such information is necessary. See pam_xauth_data3 . PAM_AUTHTOK_TYPE The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: ". The example word UNIX can be replaced with this item, by default it is empty. This item is used by pam_get_authtok3 . Linux-PAM-1.1.8/doc/man/pam.conf.50000644000000000000000000003141612216527622013243 00000000000000'\" t .\" Title: pam.conf .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM\&.CONF" "5" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam.conf, pam.d \- PAM configuration files .SH "DESCRIPTION" .PP When a \fIPAM\fR aware privilege granting application is started, it activates its attachment to the PAM\-API\&. This activation performs a number of tasks, the most important being the reading of the configuration file(s): /etc/pam\&.conf\&. Alternatively, this may be the contents of the /etc/pam\&.d/ directory\&. The presence of this directory will cause Linux\-PAM to ignore /etc/pam\&.conf\&. .PP These files list the \fIPAM\fRs that will do the authentication tasks required by this service, and the appropriate behavior of the PAM\-API in the event that individual \fIPAM\fRs fail\&. .PP The syntax of the /etc/pam\&.conf configuration file is as follows\&. The file is made up of a list of rules, each rule is typically placed on a single line, but may be extended with an escaped end of line: `\e\*(Aq\&. Comments are preceded with `#\*(Aq marks and extend to the next end of line\&. .PP The format of each rule is a space separated collection of tokens, the first three being case\-insensitive: .PP \fB service type control module\-path module\-arguments\fR .PP The syntax of files contained in the /etc/pam\&.d/ directory, are identical except for the absence of any \fIservice\fR field\&. In this case, the \fIservice\fR is the name of the file in the /etc/pam\&.d/ directory\&. This filename must be in lower case\&. .PP An important feature of \fIPAM\fR, is that a number of rules may be \fIstacked\fR to combine the services of a number of PAMs for a given authentication task\&. .PP The \fIservice\fR is typically the familiar name of the corresponding application: \fIlogin\fR and \fIsu\fR are good examples\&. The \fIservice\fR\-name, \fIother\fR, is reserved for giving \fIdefault\fR rules\&. Only lines that mention the current service (or in the absence of such, the \fIother\fR entries) will be associated with the given service\-application\&. .PP The \fItype\fR is the management group that the rule corresponds to\&. It is used to specify which of the management groups the subsequent module is to be associated with\&. Valid entries are: .PP account .RS 4 this module type performs non\-authentication based account management\&. It is typically used to restrict/permit access to a service based on the time of day, currently available system resources (maximum number of users) or perhaps the location of the applicant user \-\- \*(Aqroot\*(Aq login only on the console\&. .RE .PP auth .RS 4 this module type provides two aspects of authenticating the user\&. Firstly, it establishes that the user is who they claim to be, by instructing the application to prompt the user for a password or other means of identification\&. Secondly, the module can grant group membership or other privileges through its credential granting properties\&. .RE .PP password .RS 4 this module type is required for updating the authentication token associated with the user\&. Typically, there is one module for each \*(Aqchallenge/response\*(Aq based authentication (auth) type\&. .RE .PP session .RS 4 this module type is associated with doing things that need to be done for the user before/after they can be given service\&. Such things include the logging of information concerning the opening/closing of some data exchange with a user, mounting directories, etc\&. .RE .PP If the \fItype\fR value from the list above is prepended with a \fI\-\fR character the PAM library will not log to the system log if it is not possible to load the module because it is missing in the system\&. This can be useful especially for modules which are not always installed on the system and are not required for correct authentication and authorization of the login session\&. .PP The third field, \fIcontrol\fR, indicates the behavior of the PAM\-API should the module fail to succeed in its authentication task\&. There are two types of syntax for this control field: the simple one has a single simple keyword; the more complicated one involves a square\-bracketed selection of \fIvalue=action\fR pairs\&. .PP For the simple (historical) syntax valid \fIcontrol\fR values are: .PP required .RS 4 failure of such a PAM will ultimately lead to the PAM\-API returning failure but only after the remaining \fIstacked\fR modules (for this \fIservice\fR and \fItype\fR) have been invoked\&. .RE .PP requisite .RS 4 like \fIrequired\fR, however, in the case that such a module returns a failure, control is directly returned to the application or to the superior PAM stack\&. The return value is that associated with the first required or requisite module to fail\&. Note, this flag can be used to protect against the possibility of a user getting the opportunity to enter a password over an unsafe medium\&. It is conceivable that such behavior might inform an attacker of valid accounts on a system\&. This possibility should be weighed against the not insignificant concerns of exposing a sensitive password in a hostile environment\&. .RE .PP sufficient .RS 4 if such a module succeeds and no prior \fIrequired\fR module has failed the PAM framework returns success to the application or to the superior PAM stack immediately without calling any further modules in the stack\&. A failure of a \fIsufficient\fR module is ignored and processing of the PAM module stack continues unaffected\&. .RE .PP optional .RS 4 the success or failure of this module is only important if it is the only module in the stack associated with this \fIservice\fR+\fItype\fR\&. .RE .PP include .RS 4 include all lines of given type from the configuration file specified as an argument to this control\&. .RE .PP substack .RS 4 include all lines of given type from the configuration file specified as an argument to this control\&. This differs from \fIinclude\fR in that evaluation of the \fIdone\fR and \fIdie\fR actions in a substack does not cause skipping the rest of the complete module stack, but only of the substack\&. Jumps in a substack also can not make evaluation jump out of it, and the whole substack is counted as one module when the jump is done in a parent stack\&. The \fIreset\fR action will reset the state of a module stack to the state it was in as of beginning of the substack evaluation\&. .RE .PP For the more complicated syntax valid \fIcontrol\fR values have the following form: .sp .if n \{\ .RS 4 .\} .nf [value1=action1 value2=action2 \&.\&.\&.] .fi .if n \{\ .RE .\} .PP Where \fIvalueN\fR corresponds to the return code from the function invoked in the module for which the line is defined\&. It is selected from one of these: \fIsuccess\fR, \fIopen_err\fR, \fIsymbol_err\fR, \fIservice_err\fR, \fIsystem_err\fR, \fIbuf_err\fR, \fIperm_denied\fR, \fIauth_err\fR, \fIcred_insufficient\fR, \fIauthinfo_unavail\fR, \fIuser_unknown\fR, \fImaxtries\fR, \fInew_authtok_reqd\fR, \fIacct_expired\fR, \fIsession_err\fR, \fIcred_unavail\fR, \fIcred_expired\fR, \fIcred_err\fR, \fIno_module_data\fR, \fIconv_err\fR, \fIauthtok_err\fR, \fIauthtok_recover_err\fR, \fIauthtok_lock_busy\fR, \fIauthtok_disable_aging\fR, \fItry_again\fR, \fIignore\fR, \fIabort\fR, \fIauthtok_expired\fR, \fImodule_unknown\fR, \fIbad_item\fR, \fIconv_again\fR, \fIincomplete\fR, and \fIdefault\fR\&. .PP The last of these, \fIdefault\fR, implies \*(Aqall \fIvalueN\fR\*(Aqs not mentioned explicitly\&. Note, the full list of PAM errors is available in /usr/include/security/_pam_types\&.h\&. The \fIactionN\fR can take one of the following forms: .PP ignore .RS 4 when used with a stack of modules, the module\*(Aqs return status will not contribute to the return code the application obtains\&. .RE .PP bad .RS 4 this action indicates that the return code should be thought of as indicative of the module failing\&. If this module is the first in the stack to fail, its status value will be used for that of the whole stack\&. .RE .PP die .RS 4 equivalent to bad with the side effect of terminating the module stack and PAM immediately returning to the application\&. .RE .PP ok .RS 4 this tells PAM that the administrator thinks this return code should contribute directly to the return code of the full stack of modules\&. In other words, if the former state of the stack would lead to a return of \fIPAM_SUCCESS\fR, the module\*(Aqs return code will override this value\&. Note, if the former state of the stack holds some value that is indicative of a modules failure, this \*(Aqok\*(Aq value will not be used to override that value\&. .RE .PP done .RS 4 equivalent to ok with the side effect of terminating the module stack and PAM immediately returning to the application\&. .RE .PP N (an unsigned integer) .RS 4 equivalent to ok with the side effect of jumping over the next N modules in the stack\&. Note that N equal to 0 is not allowed (and it would be identical to ok in such case)\&. .RE .PP reset .RS 4 clear all memory of the state of the module stack and start again with the next stacked module\&. .RE .PP Each of the four keywords: required; requisite; sufficient; and optional, have an equivalent expression in terms of the [\&.\&.\&.] syntax\&. They are as follows: .PP required .RS 4 [success=ok new_authtok_reqd=ok ignore=ignore default=bad] .RE .PP requisite .RS 4 [success=ok new_authtok_reqd=ok ignore=ignore default=die] .RE .PP sufficient .RS 4 [success=done new_authtok_reqd=done default=ignore] .RE .PP optional .RS 4 [success=ok new_authtok_reqd=ok default=ignore] .RE .PP \fImodule\-path\fR is either the full filename of the PAM to be used by the application (it begins with a \*(Aq/\*(Aq), or a relative pathname from the default module location: /lib/security/ or /lib64/security/, depending on the architecture\&. .PP \fImodule\-arguments\fR are a space separated list of tokens that can be used to modify the specific behavior of the given PAM\&. Such arguments will be documented for each individual module\&. Note, if you wish to include spaces in an argument, you should surround that argument with square brackets\&. .sp .if n \{\ .RS 4 .\} .nf squid auth required pam_mysql\&.so user=passwd_query passwd=mada \e db=eminence [query=select user_name from internet_service \e where user_name=\*(Aq%u\*(Aq and password=PASSWORD(\*(Aq%p\*(Aq) and \e service=\*(Aqweb_proxy\*(Aq] .fi .if n \{\ .RE .\} .PP When using this convention, you can include `[\*(Aq characters inside the string, and if you wish to include a `]\*(Aq character inside the string that will survive the argument parsing, you should use `\e]\*(Aq\&. In other words: .sp .if n \{\ .RS 4 .\} .nf [\&.\&.[\&.\&.\e]\&.\&.] \-\-> \&.\&.[\&.\&.]\&.\&. .fi .if n \{\ .RE .\} .PP Any line in (one of) the configuration file(s), that is not formatted correctly, will generally tend (erring on the side of caution) to make the authentication process fail\&. A corresponding error is written to the system log files with a call to \fBsyslog\fR(3)\&. .PP More flexible than the single configuration file is it to configure libpam via the contents of the /etc/pam\&.d/ directory\&. In this case the directory is filled with files each of which has a filename equal to a service\-name (in lower\-case): it is the personal configuration file for the named service\&. .PP The syntax of each file in /etc/pam\&.d/ is similar to that of the /etc/pam\&.conf file and is made up of lines of the following form: .sp .if n \{\ .RS 4 .\} .nf type control module\-path module\-arguments .fi .if n \{\ .RE .\} .PP The only difference being that the service\-name is not present\&. The service\-name is of course the name of the given configuration file\&. For example, /etc/pam\&.d/login contains the configuration for the \fBlogin\fR service\&. .SH "SEE ALSO" .PP \fBpam\fR(3), \fBPAM\fR(8), \fBpam_start\fR(3) Linux-PAM-1.1.8/doc/man/pam_misc_setenv.3.xml0000644000000000000000000000466312160065211015504 00000000000000 pam_misc_setenv 3 Linux-PAM Manual pam_misc_setenv BSD like PAM environment variable setting #include <security/pam_misc.h> int pam_misc_setenv pam_handle_t *pamh const char *name const char *value intreadonly DESCRIPTION This function performs a task equivalent to pam_putenv3 , its syntax is, however, more like the BSD style function; setenv(). The name and value are concatenated with an '=' to form a name=value and passed to pam_putenv(). If, however, the PAM variable is already set, the replacement will only be applied if the last argument, readonly, is zero. SEE ALSO pam_putenv3 , pam8 STANDARDS The pam_misc_setenv function is part of the libpam_misc Library and not defined in any standard. Linux-PAM-1.1.8/doc/man/pam_misc_paste_env.30000644000000000000000000000356712216527632015403 00000000000000'\" t .\" Title: pam_misc_paste_env .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_MISC_PASTE_ENV" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_misc_paste_env \- transcribing an environment to that of PAM .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_misc_paste_env('u .BI "int pam_misc_paste_env(pam_handle_t\ *" "pamh" ", const\ char\ *\ const\ *" "user" ");" .SH "DESCRIPTION" .PP This function takes the supplied list of environment pointers and \fIuploads\fR its contents to the PAM environment\&. Success is indicated by PAM_SUCCESS\&. .SH "SEE ALSO" .PP \fBpam_putenv\fR(3), \fBpam\fR(8) .SH "STANDARDS" .PP The \fBpam_misc_paste_env\fR function is part of the \fBlibpam_misc\fR Library and not defined in any standard\&. Linux-PAM-1.1.8/doc/man/pam_error.30000644000000000000000000000454212216527624013530 00000000000000'\" t .\" Title: pam_error .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_ERROR" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_error, pam_verror \- display error messages to the user .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_error('u .BI "int pam_error(pam_handle_t\ *" "pamh" ", const\ char\ *" "fmt" ", " "\&.\&.\&." ");" .HP \w'int\ pam_verror('u .BI "int pam_verror(pam_handle_t\ *" "pamh" ", const\ char\ *" "fmt" ", va_list\ " "args" ");" .SH "DESCRIPTION" .PP The \fBpam_error\fR function prints error messages through the conversation function to the user\&. .PP The \fBpam_verror\fR function performs the same task as \fBpam_error()\fR with the difference that it takes a set of arguments which have been obtained using the \fBstdarg\fR(3) variable argument list macros\&. .SH "RETURN VALUES" .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_CONV_ERR .RS 4 Conversation failure\&. .RE .PP PAM_SUCCESS .RS 4 Error message was displayed\&. .RE .PP PAM_SYSTEM_ERR .RS 4 System error\&. .RE .SH "SEE ALSO" .PP \fBpam_info\fR(3), \fBpam_vinfo\fR(3), \fBpam_prompt\fR(3), \fBpam_vprompt\fR(3), \fBpam\fR(8) .SH "STANDARDS" .PP The \fBpam_error\fR and \fBpam_verror\fR functions are Linux\-PAM extensions\&. Linux-PAM-1.1.8/doc/man/Makefile.in0000644000000000000000000005076312216527535013532 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2006, 2007 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/man DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = 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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man3dir = $(mandir)/man3 am__installdirs = "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" \ "$(DESTDIR)$(man8dir)" man5dir = $(mandir)/man5 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) EXTRA_DIST = $(MANS) $(XMLS) man_MANS = pam.3 PAM.8 pam.8 pam.conf.5 pam.d.5 \ pam_acct_mgmt.3 pam_authenticate.3 \ pam_chauthtok.3 pam_close_session.3 pam_conv.3 \ pam_end.3 pam_error.3 \ pam_fail_delay.3 pam_xauth_data.3 \ pam_get_authtok.3 pam_get_authtok_noverify.3 pam_get_authtok_verify.3 \ pam_get_data.3 pam_get_item.3 pam_get_user.3 \ pam_getenv.3 pam_getenvlist.3 \ pam_info.3 \ pam_open_session.3 \ pam_prompt.3 pam_putenv.3 \ pam_set_data.3 pam_set_item.3 pam_syslog.3 \ pam_setcred.3 pam_sm_acct_mgmt.3 pam_sm_authenticate.3 \ pam_sm_close_session.3 pam_sm_open_session.3 pam_sm_setcred.3 \ pam_sm_chauthtok.3 pam_start.3 pam_strerror.3 \ pam_verror.3 pam_vinfo.3 pam_vprompt.3 pam_vsyslog.3 \ misc_conv.3 pam_misc_paste_env.3 pam_misc_drop_env.3 \ pam_misc_setenv.3 XMLS = pam.3.xml pam.8.xml \ pam_acct_mgmt.3.xml pam_authenticate.3.xml \ pam_chauthtok.3.xml pam_close_session.3.xml pam_conv.3.xml \ pam_end.3.xml pam_error.3.xml \ pam_fail_delay.3.xml pam_xauth_data.3 \ pam_get_authtok.3.xml pam_get_data.3.xml pam_get_item.3.xml \ pam_get_user.3.xml pam_getenv.3.xml pam_getenvlist.3.xml \ pam_info.3.xml \ pam_open_session.3.xml \ pam_prompt.3.xml pam_putenv.3.xml \ pam_set_data.3.xml pam_set_item.3.xml pam_syslog.3.xml \ pam_setcred.3.xml pam_sm_acct_mgmt.3.xml pam_sm_authenticate.3.xml \ pam_sm_close_session.3.xml pam_sm_open_session.3.xml \ pam_sm_setcred.3.xml pam_start.3.xml pam_strerror.3.xml \ pam_sm_chauthtok.3.xml \ pam_item_types_std.inc.xml pam_item_types_ext.inc.xml \ pam.conf-desc.xml pam.conf-dir.xml pam.conf-syntax.xml \ misc_conv.3.xml pam_misc_paste_env.3.xml pam_misc_drop_env.3.xml \ pam_misc_setenv.3.xml 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 ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man3: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)" @list=''; test -n "$(man3dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ done; } uninstall-man3: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man3dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man3dir)" && rm -f $$files; } install-man5: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" @list=''; test -n "$(man5dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man5dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man5dir)" && rm -f $$files; } install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man3dir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man3 install-man5 install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man3 uninstall-man5 uninstall-man8 .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-man3 \ install-man5 install-man8 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 \ uninstall-man uninstall-man3 uninstall-man5 uninstall-man8 @ENABLE_REGENERATE_MAN_TRUE@PAM.8: pam.8 @ENABLE_REGENERATE_MAN_TRUE@pam_get_authtok_noverify.3: pam_get_authtok.3 @ENABLE_REGENERATE_MAN_TRUE@pam_get_authtok_verify.3: pam_get_authtok.3 @ENABLE_REGENERATE_MAN_TRUE@pam.d.5: pam.conf.5 @ENABLE_REGENERATE_MAN_TRUE@ test -f $(srcdir)/pam\\.d.5 && mv $(srcdir)/pam\\.d.5 $(srcdir)/pam.d.5 ||: @ENABLE_REGENERATE_MAN_TRUE@pam_get_item.3: pam_item_types_std.inc.xml pam_item_types_ext.inc.xml @ENABLE_REGENERATE_MAN_TRUE@pam_set_data.3: pam_item_types_std.inc.xml pam_item_types_ext.inc.xml @ENABLE_REGENERATE_MAN_TRUE@pam.conf.5: pam.conf-desc.xml pam.conf-dir.xml pam.conf-syntax.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/doc/man/pam_end.30000644000000000000000000000613112216527623013140 00000000000000'\" t .\" Title: pam_end .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_END" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_end \- termination of PAM transaction .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_end('u .BI "int pam_end(pam_handle_t\ *" "pamh" ", int\ " "pam_status" ");" .SH "DESCRIPTION" .PP The \fBpam_end\fR function terminates the PAM transaction and is the last function an application should call in the PAM context\&. Upon return the handle \fIpamh\fR is no longer valid and all memory associated with it will be invalid\&. .PP The \fIpam_status\fR argument should be set to the value returned to the application by the last PAM library call\&. .PP The value taken by \fIpam_status\fR is used as an argument to the module specific callback function, \fBcleanup()\fR (See \fBpam_set_data\fR(3) and \fBpam_get_data\fR(3))\&. In this way the module can be given notification of the pass/fail nature of the tear\-down process, and perform any last minute tasks that are appropriate to the module before it is unlinked\&. This argument can be logically OR\*(Aqd with \fIPAM_DATA_SILENT\fR to indicate to indicate that the module should not treat the call too seriously\&. It is generally used to indicate that the current closing of the library is in a \fBfork\fR(2)ed process, and that the parent will take care of cleaning up things that exist outside of the current process space (files etc\&.)\&. .PP This function \fIfree\fR\*(Aqs all memory for items associated with the \fBpam_set_item\fR(3) and \fBpam_get_item\fR(3) functions\&. Pointers associated with such objects are not valid anymore after \fBpam_end\fR was called\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 Transaction was successful terminated\&. .RE .PP PAM_SYSTEM_ERR .RS 4 System error, for example a NULL pointer was submitted as PAM handle or the function was called by a module\&. .RE .SH "SEE ALSO" .PP \fBpam_get_data\fR(3), \fBpam_set_data\fR(3), \fBpam_start\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/man/pam_authenticate.30000644000000000000000000000640212216527622015050 00000000000000'\" t .\" Title: pam_authenticate .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_AUTHENTICATE" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_authenticate \- account authentication .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_authenticate('u .BI "int pam_authenticate(pam_handle_t\ *" "pamh" ", int\ " "flags" ");" .SH "DESCRIPTION" .PP The \fBpam_authenticate\fR function is used to authenticate the user\&. The user is required to provide an authentication token depending upon the authentication service, usually this is a password, but could also be a finger print\&. .PP The PAM service module may request that the user enter their username vio the the conversation mechanism (see \fBpam_start\fR(3) and \fBpam_conv\fR(3))\&. The name of the authenticated user will be present in the PAM item PAM_USER\&. This item may be recovered with a call to \fBpam_get_item\fR(3)\&. .PP The \fIpamh\fR argument is an authentication handle obtained by a prior call to pam_start()\&. The flags argument is the binary or of zero or more of the following values: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .PP PAM_DISALLOW_NULL_AUTHTOK .RS 4 The PAM module service should return PAM_AUTH_ERR if the user does not have a registered authentication token\&. .RE .SH "RETURN VALUES" .PP PAM_ABORT .RS 4 The application should exit immediately after calling \fBpam_end\fR(3) first\&. .RE .PP PAM_AUTH_ERR .RS 4 The user was not authenticated\&. .RE .PP PAM_CRED_INSUFFICIENT .RS 4 For some reason the application does not have sufficient credentials to authenticate the user\&. .RE .PP PAM_AUTHINFO_UNVAIL .RS 4 The modules were not able to access the authentication information\&. This might be due to a network or hardware failure etc\&. .RE .PP PAM_MAXTRIES .RS 4 One or more of the authentication modules has reached its limit of tries authenticating the user\&. Do not try again\&. .RE .PP PAM_SUCCESS .RS 4 The user was successfully authenticated\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User unknown to authentication service\&. .RE .SH "SEE ALSO" .PP \fBpam_start\fR(3), \fBpam_setcred\fR(3), \fBpam_chauthtok\fR(3), \fBpam_strerror\fR(3), \fBpam\fR(8) Linux-PAM-1.1.8/doc/man/pam_sm_close_session.3.xml0000644000000000000000000000636012160065211016530 00000000000000 pam_sm_close_session 3 Linux-PAM Manual pam_sm_close_session PAM service function to terminate session management #define PAM_SM_SESSION #include <security/pam_modules.h> PAM_EXTERN int pam_sm_close_session pam_handle_t *pamh int flags int argc const char **argv DESCRIPTION The pam_sm_close_session function is the service module's implementation of the pam_close_session3 interface. This function is called to terminate a session. The only valid value for flags is zero or: PAM_SILENT Do not emit any messages. RETURN VALUES PAM_SESSION_ERR Cannot make/remove an entry for the specified session. PAM_SUCCESS The session was successfully terminated. SEE ALSO pam3 , pam_close_session3 , pam_sm_close_session3 , pam_strerror3 , PAM8 Linux-PAM-1.1.8/doc/man/pam_set_data.3.xml0000644000000000000000000001342612160065211014746 00000000000000 pam_set_data 3 Linux-PAM Manual pam_set_data set module internal data #include <security/pam_modules.h> int pam_set_data pam_handle_t *pamh const char *module_data_name void *data void (*cleanup)(pam_handle_t *pamh, void *data, int error_status) DESCRIPTION The pam_set_data function associates a pointer to an object with the (hopefully) unique string module_data_name in the PAM context specified by the pamh argument. PAM modules may be dynamically loadable objects. In general such files should not contain static variables. This function and its counterpart pam_get_data3 , provide a mechanism for a module to associate some data with the handle pamh. Typically a module will call the pam_set_data function to register some data under a (hopefully) unique module_data_name. The data is available for use by other modules too but not by an application. Since this functions stores only a pointer to the data, the module should not modify or free the content of it. The function cleanup() is associated with the data and, if non-NULL, it is called when this data is over-written or following a call to pam_end3 . The error_status argument is used to indicate to the module the sort of action it is to take in cleaning this data item. As an example, Kerberos creates a ticket file during the authentication phase, this file might be associated with a data item. When pam_end3 is called by the module, the error_status carries the return value of the pam_authenticate3 or other libpam function as appropriate. Based on this value the Kerberos module may choose to delete the ticket file (authentication failure) or leave it in place. The error_status may have been logically OR'd with either of the following two values: PAM_DATA_REPLACE When a data item is being replaced (through a second call to pam_set_data) this mask is used. Otherwise, the call is assumed to be from pam_end3 . PAM_DATA_SILENT Which indicates that the process would prefer to perform the cleanup() quietly. That is, discourages logging/messages to the user. RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_SUCCESS Data was successful stored. PAM_SYSTEM_ERR A NULL pointer was submitted as PAM handle or the function was called by an application. SEE ALSO pam_end3 , pam_get_data3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam_strerror.3.xml0000644000000000000000000000356512160065211015047 00000000000000 pam_strerror 3 Linux-PAM Manual pam_strerror return string describing PAM error code #include <security/pam_appl.h> const char *pam_strerror pam_handle_t *pamh int errnum DESCRIPTION The pam_strerror function returns a pointer to a string describing the error code passed in the argument errnum, possibly using the LC_MESSAGES part of the current locale to select the appropriate language. This string must not be modified by the application. No library function will modify this string. RETURN VALUES This function returns always a pointer to a string. SEE ALSO pam8 Linux-PAM-1.1.8/doc/man/pam_close_session.30000644000000000000000000000444512216527623015250 00000000000000'\" t .\" Title: pam_close_session .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_CLOSE_SESSION" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_close_session \- terminate PAM session management .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_close_session('u .BI "int pam_close_session(pam_handle_t\ *" "pamh" ", int\ " "flags" ");" .SH "DESCRIPTION" .PP The \fBpam_close_session\fR function is used to indicate that an authenticated session has ended\&. The session should have been created with a call to \fBpam_open_session\fR(3)\&. .PP It should be noted that the effective uid, \fBgeteuid\fR(2)\&. of the application should be of sufficient privilege to perform such tasks as unmounting the user\*(Aqs home directory for example\&. .PP The flags argument is the binary or of zero or more of the following values: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .SH "RETURN VALUES" .PP PAM_ABORT .RS 4 General failure\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_SESSION_ERR .RS 4 Session failure\&. .RE .PP PAM_SUCCESS .RS 4 Session was successful terminated\&. .RE .SH "SEE ALSO" .PP \fBpam_open_session\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/man/pam_get_user.30000644000000000000000000000564012216527625014215 00000000000000'\" t .\" Title: pam_get_user .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_GET_USER" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_get_user \- get user name .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_get_user('u .BI "int pam_get_user(const\ pam_handle_t\ *" "pamh" ", const\ char\ **" "user" ", const\ char\ *" "prompt" ");" .SH "DESCRIPTION" .PP The \fBpam_get_user\fR function returns the name of the user specified by \fBpam_start\fR(3)\&. If no user was specified it what \fBpam_get_item (pamh, PAM_USER, \&.\&.\&. );\fR would have returned\&. If this is NULL it obtains the username via the \fBpam_conv\fR(3) mechanism, it prompts the user with the first non\-NULL string in the following list: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \fIprompt\fR argument passed to the function\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} What is returned by pam_get_item (pamh, PAM_USER_PROMPT, \&.\&.\&. ); .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The default prompt: "login: " .RE .PP By whatever means the username is obtained, a pointer to it is returned as the contents of \fI*user\fR\&. Note, this memory should \fBnot\fR be \fIfree()\fR\*(Aqd or \fImodified\fR by the module\&. .PP This function sets the \fIPAM_USER\fR item associated with the \fBpam_set_item\fR(3) and \fBpam_get_item\fR(3) functions\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 User name was successful retrieved\&. .RE .PP PAM_SYSTEM_ERR .RS 4 A NULL pointer was submitted\&. .RE .PP PAM_CONV_ERR .RS 4 The conversation method supplied by the application failed to obtain the username\&. .RE .SH "SEE ALSO" .PP \fBpam_end\fR(3), \fBpam_get_item\fR(3), \fBpam_set_item\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/man/pam_sm_setcred.30000644000000000000000000000760412216527631014527 00000000000000'\" t .\" Title: pam_sm_setcred .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SM_SETCRED" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_sm_setcred \- PAM service function to alter credentials .SH "SYNOPSIS" .sp .ft B .nf #define PAM_SM_AUTH .fi .ft .sp .ft B .nf #include .fi .ft .HP \w'PAM_EXTERN\ int\ pam_sm_setcred('u .BI "PAM_EXTERN int pam_sm_setcred(pam_handle_t\ *" "pamh" ", int\ " "flags" ", int\ " "argc" ", const\ char\ **" "argv" ");" .SH "DESCRIPTION" .PP The \fBpam_sm_setcred\fR function is the service module\*(Aqs implementation of the \fBpam_setcred\fR(3) interface\&. .PP This function performs the task of altering the credentials of the user with respect to the corresponding authorization scheme\&. Generally, an authentication module may have access to more information about a user than their authentication token\&. This function is used to make such information available to the application\&. It should only be called \fIafter\fR the user has been authenticated but before a session has been established\&. .PP Valid flags, which may be logically OR\*(Aqd with \fIPAM_SILENT\fR, are: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .PP PAM_ESTABLISH_CRED .RS 4 Initialize the credentials for the user\&. .RE .PP PAM_DELETE_CRED .RS 4 Delete the credentials associated with the authentication service\&. .RE .PP PAM_REINITIALIZE_CRED .RS 4 Reinitialize the user credentials\&. .RE .PP PAM_REFRESH_CRED .RS 4 Extend the lifetime of the user credentials\&. .RE .PP The way the \fBauth\fR stack is navigated in order to evaluate the \fBpam_setcred\fR() function call, independent of the \fBpam_sm_setcred\fR() return codes, is exactly the same way that it was navigated when evaluating the \fBpam_authenticate\fR() library call\&. Typically, if a stack entry was ignored in evaluating \fBpam_authenticate\fR(), it will be ignored when libpam evaluates the \fBpam_setcred\fR() function call\&. Otherwise, the return codes from each module specific \fBpam_sm_setcred\fR() call are treated as \fBrequired\fR\&. .SH "RETURN VALUES" .PP PAM_CRED_UNAVAIL .RS 4 This module cannot retrieve the user\*(Aqs credentials\&. .RE .PP PAM_CRED_EXPIRED .RS 4 The user\*(Aqs credentials have expired\&. .RE .PP PAM_CRED_ERR .RS 4 This module was unable to set the credentials of the user\&. .RE .PP PAM_SUCCESS .RS 4 The user credential was successfully set\&. .RE .PP PAM_USER_UNKNOWN .RS 4 The user is not known to this authentication module\&. .RE .PP These, non\-\fIPAM_SUCCESS\fR, return values will typically lead to the credential stack \fIfailing\fR\&. The first such error will dominate in the return value of \fBpam_setcred\fR()\&. .SH "SEE ALSO" .PP \fBpam\fR(3), \fBpam_authenticate\fR(3), \fBpam_setcred\fR(3), \fBpam_sm_authenticate\fR(3), \fBpam_strerror\fR(3), \fBPAM\fR(8) Linux-PAM-1.1.8/doc/man/pam_syslog.3.xml0000644000000000000000000000574212160065211014504 00000000000000 pam_syslog 3 Linux-PAM Manual pam_syslog pam_vsyslog send messages to the system logger #include <syslog.h> #include <security/pam_ext.h> void pam_syslog pam_handle_t *pamh int priority const char *fmt ... void pam_vsyslog pam_handle_t *pamh int priority const char *fmt va_list args DESCRIPTION The pam_syslog function logs messages using syslog3 and is intended for internal use by Linux-PAM and PAM service modules. The priority argument is formed by ORing the facility and the level values as documented in the syslog3 manual page. The pam_vsyslog function performs the same task as pam_syslog() with the difference that it takes a set of arguments which have been obtained using the stdarg3 variable argument list macros. SEE ALSO pam8 STANDARDS The pam_syslog and pam_vsyslog functions are Linux-PAM extensions. Linux-PAM-1.1.8/doc/man/pam_vinfo.30000644000000000000000000000001712216527626013513 00000000000000.so pam_info.3 Linux-PAM-1.1.8/doc/man/pam_end.3.xml0000644000000000000000000001044512160065211013726 00000000000000 pam_end 3 Linux-PAM Manual pam_end termination of PAM transaction #include <security/pam_appl.h> int pam_end pam_handle_t *pamh int pam_status DESCRIPTION The pam_end function terminates the PAM transaction and is the last function an application should call in the PAM context. Upon return the handle pamh is no longer valid and all memory associated with it will be invalid. The pam_status argument should be set to the value returned to the application by the last PAM library call. The value taken by pam_status is used as an argument to the module specific callback function, cleanup() (See pam_set_data3 and pam_get_data3 ). In this way the module can be given notification of the pass/fail nature of the tear-down process, and perform any last minute tasks that are appropriate to the module before it is unlinked. This argument can be logically OR'd with PAM_DATA_SILENT to indicate to indicate that the module should not treat the call too seriously. It is generally used to indicate that the current closing of the library is in a fork2 ed process, and that the parent will take care of cleaning up things that exist outside of the current process space (files etc.). This function free's all memory for items associated with the pam_set_item3 and pam_get_item3 functions. Pointers associated with such objects are not valid anymore after pam_end was called. RETURN VALUES PAM_SUCCESS Transaction was successful terminated. PAM_SYSTEM_ERR System error, for example a NULL pointer was submitted as PAM handle or the function was called by a module. SEE ALSO pam_get_data3 , pam_set_data3 , pam_start3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam_misc_paste_env.3.xml0000644000000000000000000000372312160065211016160 00000000000000 pam_misc_paste_env 3 Linux-PAM Manual pam_misc_paste_env transcribing an environment to that of PAM #include <security/pam_misc.h> int pam_misc_paste_env pam_handle_t *pamh const char * const *user DESCRIPTION This function takes the supplied list of environment pointers and uploads its contents to the PAM environment. Success is indicated by PAM_SUCCESS. SEE ALSO pam_putenv3 , pam8 STANDARDS The pam_misc_paste_env function is part of the libpam_misc Library and not defined in any standard. Linux-PAM-1.1.8/doc/man/pam_item_types_std.inc.xml0000644000000000000000000001156512160065211016627 00000000000000 PAM_SERVICE The service name (which identifies that PAM stack that the PAM functions will use to authenticate the program). PAM_USER The username of the entity under whose identity service will be given. That is, following authentication, PAM_USER identifies the local entity that gets to use the service. Note, this value can be mapped from something (eg., "anonymous") to something else (eg. "guest119") by any module in the PAM stack. As such an application should consult the value of PAM_USER after each call to a PAM function. PAM_USER_PROMPT The string used when prompting for a user's name. The default value for this string is a localized version of "login: ". PAM_TTY The terminal name: prefixed by /dev/ if it is a device file; for graphical, X-based, applications the value for this item should be the $DISPLAY variable. PAM_RUSER The requesting user name: local name for a locally requesting user or a remote user name for a remote requesting user. Generally an application or module will attempt to supply the value that is most strongly authenticated (a local account before a remote one. The level of trust in this value is embodied in the actual authentication stack associated with the application, so it is ultimately at the discretion of the system administrator. PAM_RUSER@PAM_RHOST should always identify the requesting user. In some cases, PAM_RUSER may be NULL. In such situations, it is unclear who the requesting entity is. PAM_RHOST The requesting hostname (the hostname of the machine from which the PAM_RUSER entity is requesting service). That is PAM_RUSER@PAM_RHOST does identify the requesting user. In some applications, PAM_RHOST may be NULL. In such situations, it is unclear where the authentication request is originating from. PAM_AUTHTOK The authentication token (often a password). This token should be ignored by all module functions besides pam_sm_authenticate3 and pam_sm_chauthtok3 . In the former function it is used to pass the most recent authentication token from one stacked module to another. In the latter function the token is used for another purpose. It contains the currently active authentication token. PAM_OLDAUTHTOK The old authentication token. This token should be ignored by all module functions except pam_sm_chauthtok3 . PAM_CONV The pam_conv structure. See pam_conv3 . Linux-PAM-1.1.8/doc/man/pam_start.3.xml0000644000000000000000000001204512160065211014313 00000000000000 pam_start 3 Linux-PAM Manual pam_start initialization of PAM transaction #include <security/pam_appl.h> int pam_start const char *service_name const char *user const struct pam_conv *pam_conversation pam_handle_t **pamh DESCRIPTION The pam_start function creates the PAM context and initiates the PAM transaction. It is the first of the PAM functions that needs to be called by an application. The transaction state is contained entirely within the structure identified by this handle, so it is possible to have multiple transactions in parallel. But it is not possible to use the same handle for different transactions, a new one is needed for every new context. The service_name argument specifies the name of the service to apply and will be stored as PAM_SERVICE item in the new context. The policy for the service will be read from the file /etc/pam.d/service_name or, if that file does not exist, from /etc/pam.conf. The user argument can specify the name of the target user and will be stored as PAM_USER item. If the argument is NULL, the module has to ask for this item if necessary. The pam_conversation argument points to a struct pam_conv describing the conversation function to use. An application must provide this for direct communication between a loaded module and the application. Following a successful return (PAM_SUCCESS) the contents of pamh is a handle that contains the PAM context for successive calls to the PAM functions. In an error case is the content of pamh undefined. The pam_handle_t is a blind structure and the application should not attempt to probe it directly for information. Instead the PAM library provides the functions pam_set_item3 and pam_get_item3 . The PAM handle cannot be used for mulitiple authentications at the same time as long as pam_end was not called on it before. RETURN VALUES PAM_ABORT General failure. PAM_BUF_ERR Memory buffer error. PAM_SUCCESS Transaction was successful created. PAM_SYSTEM_ERR System error, for example a NULL pointer was submitted instead of a pointer to data. SEE ALSO pam_get_data3 , pam_set_data3 , pam_end3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam_chauthtok.30000644000000000000000000000616212216527623014370 00000000000000'\" t .\" Title: pam_chauthtok .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_CHAUTHTOK" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_chauthtok \- updating authentication tokens .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_chauthtok('u .BI "int pam_chauthtok(pam_handle_t\ *" "pamh" ", int\ " "flags" ");" .SH "DESCRIPTION" .PP The \fBpam_chauthtok\fR function is used to change the authentication token for a given user (as indicated by the state associated with the handle \fIpamh\fR)\&. .PP The \fIpamh\fR argument is an authentication handle obtained by a prior call to pam_start()\&. The flags argument is the binary or of zero or more of the following values: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .PP PAM_CHANGE_EXPIRED_AUTHTOK .RS 4 This argument indicates to the modules that the users authentication token (password) should only be changed if it has expired\&. If this argument is not passed, the application requires that all authentication tokens are to be changed\&. .RE .SH "RETURN VALUES" .PP PAM_AUTHTOK_ERR .RS 4 A module was unable to obtain the new authentication token\&. .RE .PP PAM_AUTHTOK_RECOVERY_ERR .RS 4 A module was unable to obtain the old authentication token\&. .RE .PP PAM_AUTHTOK_LOCK_BUSY .RS 4 One or more of the modules was unable to change the authentication token since it is currently locked\&. .RE .PP PAM_AUTHTOK_DISABLE_AGING .RS 4 Authentication token aging has been disabled for at least one of the modules\&. .RE .PP PAM_PERM_DENIED .RS 4 Permission denied\&. .RE .PP PAM_SUCCESS .RS 4 The authentication token was successfully updated\&. .RE .PP PAM_TRY_AGAIN .RS 4 Not all of the modules were in a position to update the authentication token(s)\&. In such a case none of the user\*(Aqs authentication tokens are updated\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User unknown to password service\&. .RE .SH "SEE ALSO" .PP \fBpam_start\fR(3), \fBpam_authenticate\fR(3), \fBpam_setcred\fR(3), \fBpam_get_item\fR(3), \fBpam_strerror\fR(3), \fBpam\fR(8) Linux-PAM-1.1.8/doc/man/pam_get_user.3.xml0000644000000000000000000001024712160065211014775 00000000000000 pam_get_user 3 Linux-PAM Manual pam_get_user get user name #include <security/pam_modules.h> int pam_get_user const pam_handle_t *pamh const char **user const char *prompt DESCRIPTION The pam_get_user function returns the name of the user specified by pam_start3 . If no user was specified it what pam_get_item (pamh, PAM_USER, ... ); would have returned. If this is NULL it obtains the username via the pam_conv3 mechanism, it prompts the user with the first non-NULL string in the following list: The prompt argument passed to the function. What is returned by pam_get_item (pamh, PAM_USER_PROMPT, ... ); The default prompt: "login: " By whatever means the username is obtained, a pointer to it is returned as the contents of *user. Note, this memory should not be free()'d or modified by the module. This function sets the PAM_USER item associated with the pam_set_item3 and pam_get_item3 functions. RETURN VALUES PAM_SUCCESS User name was successful retrieved. PAM_SYSTEM_ERR A NULL pointer was submitted. PAM_CONV_ERR The conversation method supplied by the application failed to obtain the username. SEE ALSO pam_end3 , pam_get_item3 , pam_set_item3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam_get_data.3.xml0000644000000000000000000000640012160065211014724 00000000000000 pam_get_data 3 Linux-PAM Manual pam_get_data get module internal data #include <security/pam_modules.h> int pam_get_data const pam_handle_t *pamh const char *module_data_name const void **data DESCRIPTION This function together with the pam_set_data3 function is useful to manage module-specific data meaningful only to the calling PAM module. The pam_get_data function looks up the object associated with the (hopefully) unique string module_data_name in the PAM context specified by the pamh argument. A successful call to pam_get_data will result in data pointing to the object. Note, this data is not a copy and should be treated as constant by the module. RETURN VALUES PAM_SUCCESS Data was successful retrieved. PAM_SYSTEM_ERR A NULL pointer was submitted as PAM handle or the function was called by an application. PAM_NO_MODULE_DATA Module data not found or there is an entry, but it has the value NULL. SEE ALSO pam_end3 , pam_set_data3 , pam_strerror3 Linux-PAM-1.1.8/doc/man/pam_open_session.30000644000000000000000000000446012216527626015104 00000000000000'\" t .\" Title: pam_open_session .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_OPEN_SESSION" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_open_session \- start PAM session management .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_open_session('u .BI "int pam_open_session(pam_handle_t\ *" "pamh" ", int\ " "flags" ");" .SH "DESCRIPTION" .PP The \fBpam_open_session\fR function sets up a user session for a previously successful authenticated user\&. The session should later be terminated with a call to \fBpam_close_session\fR(3)\&. .PP It should be noted that the effective uid, \fBgeteuid\fR(2)\&. of the application should be of sufficient privilege to perform such tasks as creating or mounting the user\*(Aqs home directory for example\&. .PP The flags argument is the binary or of zero or more of the following values: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .SH "RETURN VALUES" .PP PAM_ABORT .RS 4 General failure\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_SESSION_ERR .RS 4 Session failure\&. .RE .PP PAM_SUCCESS .RS 4 Session was successful created\&. .RE .SH "SEE ALSO" .PP \fBpam_close_session\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/man/misc_conv.3.xml0000644000000000000000000001664112207335635014323 00000000000000 misc_conv 3 Linux-PAM Manual misc_conv text based conversation function #include <security/pam_misc.h> int misc_conv int num_msg const struct pam_message **msgm struct pam_response **response void *appdata_ptr DESCRIPTION The misc_conv function is part of libpam_misc and not of the standard libpam library. This function will prompt the user with the appropriate comments and obtain the appropriate inputs as directed by authentication modules. In addition to simply slotting into the appropriate pam_conv3 , this function provides some time-out facilities. The function exports five variables that can be used by an application programmer to limit the amount of time this conversation function will spend waiting for the user to type something. The five variabls are as follows: time_t pam_misc_conv_warn_time; This variable contains the time (as returned by time2 ) that the user should be first warned that the clock is ticking. By default it has the value 0, which indicates that no such warning will be given. The application may set its value to sometime in the future, but this should be done prior to passing control to the Linux-PAM library. const char *pam_misc_conv_warn_line; Used in conjuction with pam_misc_conv_warn_time, this variable is a pointer to the string that will be displayed when it becomes time to warn the user that the timeout is approaching. Its default value is a translated version of ...Time is running out..., but this can be changed by the application prior to passing control to Linux-PAM. time_t pam_misc_conv_die_time; This variable contains the time (as returned by time2 ) that the will time out. By default it has the value 0, which indicates that the conversation function will not timeout. The application may set its value to sometime in the future, but this should be done prior to passing control to the Linux-PAM library. const char *pam_misc_conv_die_line; Used in conjuction with pam_misc_conv_die_time, this variable is a pointer to the string that will be displayed when the conversation times out. Its default value is a translated version of ...Sorry, your time is up!, but this can be changed by the application prior to passing control to Linux-PAM. int pam_misc_conv_died; Following a return from the Linux-PAM libraray, the value of this variable indicates whether the conversation has timed out. A value of 1 indicates the time-out occurred. The following two function pointers are available for supporting binary prompts in the conversation function. They are optimized for the current incarnation of the libpamc library and are subject to change. int (*pam_binary_handler_fn)(void *appdata, pamc_bp_t *prompt_p); This function pointer is initialized to NULL but can be filled with a function that provides machine-machine (hidden) message exchange. It is intended for use with hidden authentication protocols such as RSA or Diffie-Hellman key exchanges. (This is still under development.) int (*pam_binary_handler_free)(void *appdata, pamc_bp_t *delete_me); This function pointer is initialized to PAM_BP_RENEW(delete_me, 0, 0), but can be redefined as desired by the application. SEE ALSO pam_conv3 , pam8 STANDARDS The misc_conv function is part of the libpam_misc Library and not defined in any standard. Linux-PAM-1.1.8/doc/man/pam_sm_close_session.30000644000000000000000000000434112216527630015740 00000000000000'\" t .\" Title: pam_sm_close_session .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SM_CLOSE_SESSION" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_sm_close_session \- PAM service function to terminate session management .SH "SYNOPSIS" .sp .ft B .nf #define PAM_SM_SESSION .fi .ft .sp .ft B .nf #include .fi .ft .HP \w'PAM_EXTERN\ int\ pam_sm_close_session('u .BI "PAM_EXTERN int pam_sm_close_session(pam_handle_t\ *" "pamh" ", int\ " "flags" ", int\ " "argc" ", const\ char\ **" "argv" ");" .SH "DESCRIPTION" .PP The \fBpam_sm_close_session\fR function is the service module\*(Aqs implementation of the \fBpam_close_session\fR(3) interface\&. .PP This function is called to terminate a session\&. The only valid value for \fIflags\fR is zero or: .PP PAM_SILENT .RS 4 Do not emit any messages\&. .RE .SH "RETURN VALUES" .PP PAM_SESSION_ERR .RS 4 Cannot make/remove an entry for the specified session\&. .RE .PP PAM_SUCCESS .RS 4 The session was successfully terminated\&. .RE .SH "SEE ALSO" .PP \fBpam\fR(3), \fBpam_close_session\fR(3), \fBpam_sm_close_session\fR(3), \fBpam_strerror\fR(3), \fBPAM\fR(8) Linux-PAM-1.1.8/doc/man/pam_get_data.30000644000000000000000000000463712216527625014155 00000000000000'\" t .\" Title: pam_get_data .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_GET_DATA" "3" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_get_data \- get module internal data .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ pam_get_data('u .BI "int pam_get_data(const\ pam_handle_t\ *" "pamh" ", const\ char\ *" "module_data_name" ", const\ void\ **" "data" ");" .SH "DESCRIPTION" .PP This function together with the \fBpam_set_data\fR(3) function is useful to manage module\-specific data meaningful only to the calling PAM module\&. .PP The \fBpam_get_data\fR function looks up the object associated with the (hopefully) unique string \fImodule_data_name\fR in the PAM context specified by the \fIpamh\fR argument\&. A successful call to \fBpam_get_data\fR will result in \fIdata\fR pointing to the object\&. Note, this data is \fInot\fR a copy and should be treated as \fIconstant\fR by the module\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 Data was successful retrieved\&. .RE .PP PAM_SYSTEM_ERR .RS 4 A NULL pointer was submitted as PAM handle or the function was called by an application\&. .RE .PP PAM_NO_MODULE_DATA .RS 4 Module data not found or there is an entry, but it has the value NULL\&. .RE .SH "SEE ALSO" .PP \fBpam_end\fR(3), \fBpam_set_data\fR(3), \fBpam_strerror\fR(3) Linux-PAM-1.1.8/doc/Makefile.am0000644000000000000000000000103312160065211012712 00000000000000# # Copyright (c) 2005, 2006 Thorsten Kukuk # SUBDIRS = man specs sag adg mwg CLEANFILES = *~ dist_html_DATA = index.html ####################################################### releasedocs: all $(mkinstalldirs) $(top_builddir)/Linux-PAM-$(VERSION)/doc/specs cp -av specs/draft-morgan-pam-current.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/specs/ cp -av $(srcdir)/specs/rfc86.0.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/specs/ make -C sag releasedocs make -C adg releasedocs make -C mwg releasedocs Linux-PAM-1.1.8/doc/specs/0000755000000000000000000000000012216542314012064 500000000000000Linux-PAM-1.1.8/doc/specs/draft-morgan-pam.raw0000644000000000000000000007153412160065211015657 00000000000000Open-PAM working group ## A.G. Morgan Internet Draft: ## Dec 8, 2001 Document: draft-morgan-pam-08.txt ## Expires: June 8, 2002 ## Obsoletes: draft-morgan-pam-07.txt## ## Pluggable Authentication Modules (PAM) ## #$ Status of this memo This document is a draft specification. Its contents are subject to change with revision. The latest version of this draft may be obtained from here: http://www.kernel.org/pub/linux/libs/pam/pre/doc/ As Linux-PAM-'version'-docs.tar.gz It is also contained in the Linux-PAM tar ball. #$ Abstract This document is concerned with the definition of a general infrastructure for module based authentication. The infrastructure is named Pluggable Authentication Modules (PAM for short). #$ Introduction Computers are tools. They provide services to people and other computers (collectively we shall call these _users_ entities). In order to provide convenient, reliable and individual service to different entities, it is common for entities to be labelled. Having defined a label as referring to a some specific entity, the label is used for the purpose of protecting and allocating data resources. All modern operating systems have a notion of labelled entities and all modern operating systems face a common problem: how to authenticate the association of a predefined label with applicant entities. There are as many authentication methods as one might care to count. None of them are perfect and none of them are invulnerable. In general, any given authentication method becomes weaker over time. It is common then for new authentication methods to be developed in response to newly discovered weaknesses in the old authentication methods. The problem with inventing new authentication methods is the fact that old applications do not support them. This contributes to an inertia that discourages the overhaul of weakly protected systems. Another problem is that individuals (people) are frequently powerless to layer the protective authentication around their systems. They are forced to rely on single (lowest common denominator) authentication schemes even in situations where this is far from appropriate. PAM, as discussed in this document, is a generalization of the approach first introduced in [#$R#{OSF_RFC_PAM}]. In short, it is a general framework of interfaces that abstract the process of authentication. With PAM, a service provider can custom protect individual services to the level that they deem is appropriate. PAM has nothing explicit to say about transport layer encryption. Within the context of this document encryption and/or compression of data exchanges are application specific (strictly between client and server) and orthogonal to the process of authentication. #$ Definitions Here we pose the authentication problem as one of configuring defined interfaces between two entities. #$$#{players} Players in the authentication process PAM reserves the following words to specify unique entities in the authentication process: applicant the entity (user) initiating an application for service [PAM associates the PAM_RUSER _item_ with this requesting user]. arbitrator the entity (user) under whose identity the service application is negotiated and with whose authority service is granted. user the entity (user) whose identity is being authenticated [PAM associates the PAM_USER _item_ with this identity]. server the application that provides service, or acts as an authenticated gateway to the requested service. This application is completely responsible for the server end of the transport layer connecting the server to the client. PAM makes no assumptions about how data is encapsulated for exchanges between the server and the client, only that full octet sequences can be freely exchanged without corruption. client application providing the direct/primary interface to applicant. This application is completely responsible for the client end of the transport layer connecting the server to the client. PAM makes no assumptions about how data is encapsulated for exchanges between the server and the client, only that full octet sequences can be freely exchanged without corruption. module authentication binary that provides server-side support for some (arbitrary) authentication method. agent authentication binary that provides client-side support for some (arbitrary) authentication method. Here is a diagram to help orient the reader: ## +-------+ +--------+ ## ## . . . . .| agent | .| module | ## ## . +-------+ .+--------+ ## ## V | . | ## ## . | V | ## ## +---------+ +-------+ . +------+ ## ## | | |libpamc| . |libpam| ## ## | | +-------+ . +------+ ## ## |applicant| | . | ## ## | | +--------+ +----------+ ## ## | |---| client |-----------| server | ## ## +---------+ +--------+ +----------+ ## Solid lines connecting the boxes represent two-way interaction. The dotted-directed lines indicate an optional connection beteween the plugin module (agent) and the server (applicant). In the case of the module, this represents the module invoking the 'conversation' callback function provided to libpam by the server application when it inititializes the libpam library. In the case of the agent, this may be some out-of-PAM API interaction (for example directly displaying a dialog box under X). #$$ Defined Data Types In this draft, we define two composite data types, the text string and the binary prompt. They are the data types used to communicate authentication requests and responses. #$$$#{text_string} text string The text string is a simple sequence of non-NUL (NUL = 0x00) octets. Terminated with a single NUL (0x00) octet. The character set employed in the octet sequence may be negotiated out of band, but defaults to utf-8. ## --------------------------- ## ## [ character data | NUL ] ## ## [ octet sequence | 0x00 ] ## ## --------------------------- ## Within the rest of this text, PAM text strings are delimited with a pair of double quotes. Example, "this" = {'t';'h';'i';'s';0x00}. #$$$#{binary_prompt} binary prompt A binary prompt consists of a stream of octets arranged as follows: ## ---------------------------------------- ## ## [ u32 | u8 | (length-5 octets) ] ## ## [ length | control | data ] ## ## ---------------------------------------- ## That is, a 32-bit unsigned integer in network byte order, a single unsigned byte of control information and a sequence of octets of length (length-5). The composition of the _data_ is context dependent but is generally not a concern for either the server or the client. It is very much the concern of modules and agents. For purposes of interoperability, we define the following control characters as legal. ## value symbol description ## ## ------------------------------------------------- ## ## 0x01 PAM_BPC_OK - continuation packet ## ## 0x02 PAM_BPC_SELECT - initialization packet ## ## 0x03 PAM_BPC_DONE - termination packet ## ## 0x04 PAM_BPC_FAIL - unable to execute ## The following control characters are only legal for exchanges between an agent and a client (it is the responsibility of the client to enforce this rule in the face of a rogue server): ## 0x41 PAM_BPC_GETENV - obtain client env.var ## ## 0x42 PAM_BPC_PUTENV - set client env.var ## ## 0x43 PAM_BPC_TEXT - display message ## ## 0x44 PAM_BPC_ERROR - display error message ## ## 0x45 PAM_BPC_PROMPT - echo'd text prompt ## ## 0x46 PAM_BPC_PASS - non-echo'd text prompt ## ## 0x46 PAM_BPC_STATUS - ping all active clients## ## 0x47 PAM_BPC_ABORT - please abort session ## Note, length is always equal to the total length of the binary prompt and represented by a network ordered unsigned 32 bit integer. #$$$$#{agent_ids} PAM_BPC_SELECT binary prompts Binary prompts of control type PAM_BPC_SELECT have a defined data part. It is composed of three elements: {agent_id;'/';data} The agent_id is a sequence of characters satisfying the following regexp: /^[a-z0-9\_]+(@[a-z0-9\_.]+)?$/ and has a specific form for each independent agent. o Agent_ids that do not contain an at-sign (@) are to be considered as representing some authentication mode that is a "public standard" see reference [#$R#{PAM_STD_AGENTIDS}]. Registered names MUST NOT contain an at-sign (@). o Anyone can define additional agents by using names in the format name@domainname, e.g. "ouragent@example.com". The part following the at-sign MUST be a valid fully qualified internet domain name [RFC-1034] controlled by the person or organization defining the name. (Said another way, if you control the email address that your agent has as an identifier, they you are entitled to use this identifier.) It is up to each domain how it manages its local namespace. The '/' character is a mandatory delimiter, indicating the end of the agent_id. The trailing data is of a format specific to the agent with the given agent_id. #$$ Special cases In a previous section (#{players}) we identified the most general selection of authentication participants. In the case of network authentication, it is straightforward to ascribe identities to the defined participants. However, there are also special (less general) cases that we recognize here. The primary authentication step, when a user is directly introduced into a computer system (log's on to a workstation) is a special case. In this situation, the client and the server are generally one application. Before authenticating such a user, the applicant is formally unknown: PAM_RUSER is NULL. Some client-server implementations (telnet for example) provide effective full tty connections. In these cases, the four simple text string prompting cases (see below) can be handled as in the primary login step. In other words, the server absorbs most of the overhead of propagating authentication messages. In these cases, there needs to be special client/server support for handling binary prompts. In some circumstances, a legacy network transfer protocol can carry authentication information. In such cases, a desire to support legacy clients (with no client-side support for PAM) will neccessitate the 'hardcoding' of an agent protocol into the server application. Whilst against the spirit of PAM, this special casing can be managed by the server's 'conversation function' (see below). The guiding principle when implementing such support is for the application developer to relegate the authentication process to the PAM module -- simply performing a transcription of data from binary-prompt to legacy network 'packet' and visa-versa for propagating replies back to the driving PAM module. A common case of this is with network protocols that define an initialization packet of "user+password". In such cases one should attempt to support the "userpass" agent-id and its defined protocol. #$ Defined interfaces for information flow Here, we discuss the information exchange interfaces between the players in the authentication process. It should be understood that the server side is responsible for driving the authentication of the applicant. Notably, every request received by the client from the server must be matched with a single response from the client to the server. #$$#{applicant_client} Applicant <-> client Once the client is invoked, requests to the applicant entity are initiated by the client application. General clients are able to make the following requests directly to an applicant: echo text string echo error text string prompt with text string for echo'd text string input prompt with text string for concealed text string input the nature of the interface provided by the client for the benefit of the applicant entity is client specific and not defined by PAM. #$$#{client_agent} Client <-> agent In general, authentication schemes require more modes of exchange than the four defined in the previous section (#{applicant_client}). This provides a role for client-loadable agents. The client and agent exchange binary-messages that can have one of the following forms: client -> agent binary prompt agent expecting binary prompt reply to client agent -> client binary prompt reply from agent to clients binary prompt Following the acceptance of a binary prompt by the agent, the agent may attempt to exchange information with the client before returning its binary prompt reply. Permitted exchanges are binary prompts of the following types: agent -> client set environment variable (A) get environment variable (B) echo text string (C) echo error text string (D) prompt for echo'd text string input (E) prompt for concealed text string input (F) In response to these prompts, the client must legitimately respond with a corresponding binary prompt reply. We list a complete set of example exchanges, including each type of legitimate response (passes and a single fail): ## Type | Agent request | Client response ## ## --------------------------------------------------------------- ## ## (A) | {13;PAM_BPC_PUTENV;"FOO=BAR"} | {5;PAM_BPC_OK;} ## ## | {10;PAM_BPC_PUTENV;"FOO="} | {5;PAM_BPC_OK;} ## ## | {9;PAM_BPC_PUTENV;"FOO"} (*) | {5;PAM_BPC_OK;} ## ## | {9;PAM_BPC_PUTENV;"BAR"} (*) | {5;PAM_BPC_FAIL;} ## ## --------------------------------------------------------------- ## ## (B) | {10;PAM_BPC_GETENV;"TERM"} | {11;PAM_BPC_OK;"vt100"} ## ## | {9;PAM_BPC_GETENV;"FOO"} | {5;PAM_BPC_FAIL;} ## ## --------------------------------------------------------------- ## ## (C) | {12;PAM_BPC_TEXT;"hello!"} | {5;PAM_BPC_OK;} ## ## | {12;PAM_BPC_TEXT;"hello!"} | {5;PAM_BPC_FAIL;} ## ## --------------------------------------------------------------- ## ## (D) | {11;PAM_BPC_ERROR;"ouch!"} | {5;PAM_BPC_OK;} ## ## | {11;PAM_BPC_ERROR;"ouch!"} | {5;PAM_BPC_FAIL;} ## ## --------------------------------------------------------------- ## ## (E) | {13;PAM_BPC_PROMPT;"login: "} | {9;PAM_BPC_OK;"joe"} ## ## | {13;PAM_BPC_PROMPT;"login: "} | {6;PAM_BPC_OK;""} ## ## | {13;PAM_BPC_PROMPT;"login: "} | {5;PAM_BPC_FAIL;} ## ## --------------------------------------------------------------- ## ## (F) | {16;PAM_BPC_PASS;"password: "} | {9;PAM_BPC_OK;"XYZ"} ## ## | {16;PAM_BPC_PASS;"password: "} | {6;PAM_BPC_OK;""} ## ## | {16;PAM_BPC_PASS;"password: "} | {5;PAM_BPC_FAIL;} ## (*) Used to attempt the removal of a pre-existing environment variable. #$$ Client <-> server Once the client has established a connection with the server (the nature of the transport protocol is not specified by PAM), the server is responsible for driving the authentication process. General servers can request the following from the client: (to be forwarded by the client to the applicant) echo text string echo error text string prompt for echo'd text string response prompt for concealed text string response (to be forwarded by the client to the appropriate agent) binary prompt for a binary prompt response Client side agents are required to process binary prompts. The agents' binary prompt responses are returned to the server. #$$ Server <-> module Modules drive the authentication process. The server provides a conversation function with which it encapsulates module-generated requests and exchanges them with the client. Every message sent by a module should be acknowledged. General conversation functions can support the following five conversation requests: echo text string echo error string prompt for echo'd text string response prompt for concealed text string response binary prompt for binary prompt response The server is responsible for redirecting these requests to the client. #$ C API for application interfaces (client and server) #$$ Applicant <-> client No API is defined for this interface. The interface is considered to be specific to the client application. Example applications include terminal login, (X)windows login, machine file transfer applications. All that is important is that the client application is able to present the applicant with textual output and to receive textual input from the applicant. The forms of textual exchange are listed in an earlier section (#{applicant_client}). Other methods of data input/output are better suited to being handled via an authentication agent. #$$ Client <-> agent The client makes use of a general API for communicating with agents. The client is not required to communicate directly with available agents, instead a layer of abstraction (in the form of a library: libpamc) takes care of loading and maintaining communication with all requested agents. This layer of abstraction will choose which agents to interact with based on the content of binary prompts it receives that have the control type PAM_BPC_SELECT. #$$$ Client <-> libpamc #$$$$ Compilation information The C-header file provided for client-agent abstraction is included with the following source line: \#include The library providing the corresponding client-agent abstraction functions is, libpamc. cc .... -lpamc #$$$$ Initializing libpamc The libpamc library is initialized with a call to the following function: pamc_handle_t pamc_start(void); This function is responsible for configuring the library and registering the location of available agents. The location of the available agents on the system is implementation specific. pamc_start() function returns NULL on failure. Otherwise, the return value is a pointer to an opaque data type which provides a handle to the libpamc library. On systems where threading is available, the libpamc libraray is thread safe provided a single (pamc_handler_t *) is used by each thread. #$$$$ Client (Applicant) selection of agents For the purpose of applicant and client review of available agents, the following function is provided. char **pamc_list_agents(pamc_handle_t pch); This returns a list of pointers to the agent_id's of the agents which are available on the system. The list is terminated by a NULL pointer. It is the clients responsibility to free this memory area by calling free() on each agent id and the block of agent_id pointers in the result. PAM represents a server-driven authentication model, so by default any available agent may be invoked in the authentication process. #$$$$$ Client demands agent If the client requires that a specific authentication agent is satisfied during the authentication process, then the client should call the following function, immediately after obtaining a pamc_handle_t from pamc_start(). int pamc_load(pamc_handle_t pch, const char *agent_id); agent_id is a PAM text string (see section #{agent_ids}) and is not suffixed with a '/' delimiter. The return value for this function is: PAM_BPC_TRUE - agent located and loaded. PAM_BPC_FALSE - agent is not available. Note, although the agent is loaded, no data is fed to it. The agent's opportunity to inform the client that it does not trust the server is when the agent is shutdown. #$$$$$ Client marks agent as unusable The applicant might prefer that a named agent is marked as not available. To do this, the client would invoke the following function immediately after obtaining a pamc_handle_t from pam_start(). int pamc_disable(pamc_handle_t pch, const char *agent_id); here agent_id is a PAM text string containing an agent_id (section #{agent_ids}). The return value for this function is: PAM_BPC_TRUE - agent is disabled. This is the response independent of whether the agent is locally available. PAM_BPC_FALSE - agent cannot be disabled (this may be because it has already been invoked). #$$$$ Allocating and manipulating binary prompts All conversation between an client and an agent takes place with respect to binary prompts. A binary prompt (see section #{binary_prompt}), is obtained, resized and deleted via the following C-macro: CREATION of a binary prompt with control X1 and data length Y1: pamc_bp_t prompt = NULL; PAM_BP_RENEW(&prompt, X1, Y1); REPLACEMENT of a binary prompt with a control X2 and data length Y2: PAM_BP_RENEW(&prompt, X2, Y2); DELETION of a binary prompt (the referenced prompt is scrubbed): PAM_BP_RENEW(&prompt, 0, 0); Note, the PAM_BP_RENEW macro always overwrites any prompt that you call it with, deleting and liberating the old contents in a secure fashion. Also note that PAM_BP_RENEW, when returning a prompt of data size Y1>0, will always append a '\0' byte to the end of the prompt (at data offset Y1). It is thus, by definition, acceptable to treat the data contents of a binary packet as a text string (see #{text_string}). FILLING a binary prompt from a memory pointer U1 from offset O1 of length L1: PAM_BP_FILL(prompt, O1, L1, U1); the CONTROL type for the packet can be obtained as follows: control = PAM_PB_CONTROL(prompt); the LENGTH of a data within the prompt (_excluding_ its header information) can be obtained as follows: length = PAM_BP_LENGTH(prompt); the total SIZE of the prompt (_including_ its header information) can be obtained as follows: size = PAM_BP_SIZE(prompt); EXTRACTING data from a binary prompt from offset O2 of length L2 to a memory pointer U2: PAM_BP_EXTRACT(prompt, O2, L2, U2); If you require direct access to the raw prompt DATA, you should use the following macro: __u8 *raw_data = PAM_BP_DATA(prompt); #$$$$ Client<->agent conversations All exchanges of binary prompts with agents are handled with the single function: int pamc_converse(pamc_handle_t *pch, pamc_bp_t *prompt_p); The return value for pamc_converse(...) is PAM_BPC_TRUE when there is a response packet and PAM_BPC_FALSE when the client is unable to handle the request represented by the original prompt. In this latter case, *prompt_p is set to NULL. This function takes a binary prompt and returns a replacement binary prompt that is either a request from an agent to be acted upon by the client or the 'result' which should be forwarded to the server. In the former case, the following macro will return 1 (PAM_BPC_TRUE) and in all other cases, 0 (PAM_BPC_FALSE): PAM_BPC_FOR_CLIENT(/* pamc_bp_t */ prompt) Note, all non-NULL binary prompts returned by pamc_converse(...), are terminated with a '\0', even when the full length of the prompt (as returned by the agent) does not contain this delimiter. This is a defined property of the PAM_BP_RENEW macro, and can be relied upon. Important security note: in certain implementations, agents are implemented by executable binaries, which are transparently loaded and managed by the PAM client library. To ensure there is never a leakage of elevated privilege to an unprivileged agent, the client application should go to some effort to lower its level of privilege. It remains the responsibility of the applicant and the client to ensure that it is not compromised by a rogue agent. #$$$$ Status of agents int pamc_status(pamc_handle_t *pch, pamc_bp_t *prompt_p); At any time, the client may ping all active agents for their status (with a PAM_BPC_STATUS binary prompt). If any agent replies with PAM_BPC_ABORT, the client is responsible for terminating the connection to the server and then terminating all agents with a call to pamc_end(). In such cases, the return value of pamc_status() is PAM_BPC_FALSE. If the return status of pamc_status() is PAM_BPC_TRUE and *prompt_p is non-NULL, then an agent is requesting access to a server module. XXX - how this information gets propagated to the server, and ultimately to the server's module is yet to be determined. #$$$$ Termination of agents When closing the authentication session and severing the connection between a client and a selection of agents, the following function is used: int pamc_end(pamc_handle_t *pch); Following a call to pamc_end, the pamc_handle_t will be invalid. The return value for this function is one of the following: PAM_BPC_TRUE - all invoked agents are content with authentication (the server is _not_ judged _un_trustworthy by any agent) PAM_BPC_FALSE - one or more agents were unsatisfied at being terminated. In general, the client should terminate its connection to the server and indicate to the applicant that the server is untrusted. #$$$ libpamc <-> agents The agents are manipulated from within libpamc. Each agent is an executable in its own right. This permits the agent to have access to sensitive data not accessible directly from the client. The mode of communication between libpamc and an agent is through a pair of pipes. The agent reads binary prompts (section #{binary_prompt}) through its standard input file descriptor and writes response (to the server) binary prompts and instruction binary prompts (instructions for the client) through its standard output file descriptor. #$$ Client <-> server This interface is concerned with the exchange of text and binary prompts between the client application and the server application. No API is provided for this as it is considered specific to the transport protocol shared by the client and the server. #$$ Server <-> modules The server makes use of a general API for communicating with modules. The client is not required to communicate directly with available modules. By abstracting the authentication interface, it becomes possible for the local administrator to make a run time decision about the authentication method adopted by the server. #$$$ Functions and definitions available to servers and modules [This section will document the following functions pam_set_item() pam_get_item() pam_fail_delay(pam_handle_t *pamh, unsigned int micro_sec) pam_get_env(pam_handle_t *pamh, const char *varname) pam_strerror(pam_handle_t *pamh, int pam_errno) Event driven support (XXX work in progress) pam_register_event() - app or module associates an event poller/handler pam_select_event() - query for any outstanding event and act on any ] #$$$ Server <-> libpam [This section will document the following pam_ calls: pam_start pam_end pam_authenticate (*) pam_setcred pam_acct_mgmt pam_open_session pam_close_session pam_chauthtok (*) The asterisked functions may return PAM_INCOMPLETE. In such cases, the application should be aware that the conversation function was called and that it returned PAM_CONV_AGAIN to a module. The correct action for the application to take in response to receiving PAM_INCOMPLETE, is to acquire the replies so that the next time the conversation function is called it will be able to provide the desired responses. And then recall pam_authenticate (pam_chauthtok) with the same arguments. Libpam will arrange that the module stack is resumed from the module that returned before. This functionality is required for programs whose user interface is maintained by an event loop. ] #$$$ libpam <-> modules [This section will document the following pam_ and pam_sm_ calls: functions provided by libpam pam_set_data pam_get_data functions provided to libpam by each module groups: AUTHENTICATION pam_sm_authenticate pam_sm_setcred ACCOUNT pam_sm_acct_mgmt SESSION pam_sm_open_session pam_sm_close_session AUTHENTICATION TOKEN MANAGEMENT pam_sm_chauthtok ] #$$$ The conversation function The server application, as part of its initialization of libpam, provides a conversation function for use by modules and libpam. The purpose of the conversation function is to enable direct communication to the applicant ultimately via the client and selected agents. [ this section will contain a definition for the conversation function, the conversation structure (appdata etc), and legitimate return codes for the application supplied function. PAM_SUCCESS - ok conversation completed PAM_CONV_ERR - conversation failed PAM_CONV_AGAIN - application needs control to complete conv PAM_CONV_RECONSIDER - application believes module should check if it still needs to converse for this info ] #$ Security considerations This document is devoted to standardizing authentication infrastructure: everything in this document has implications for security. #$ Contact The email list for discussing issues related to this document is . #$ References [#{OSF_RFC_PAM}] OSF RFC 86.0, "Unified Login with Pluggable Authentication Modules (PAM)", October 1995 [#{PAM_STD_AGENTIDS}] Definitions for standard agents, "REGISTERED AGENTS AND THEIR AGENT-ID'S", to be found here: ## http://www.kernel.org/pub/linux/libs/pam/pre/doc/std-agent-ids.txt ## #$ Author's Address Andrew G. Morgan Email: morgan@kernel.org ## $Id$ ## Linux-PAM-1.1.8/doc/specs/parse_y.h0000644000000000000000000000462112216527633013631 00000000000000/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 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, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { NEW_COUNTER = 258, LABEL = 259, HASH = 260, CHAR = 261, NEWLINE = 262, NO_INDENT = 263, RIGHT = 264 }; #endif /* Tokens. */ #define NEW_COUNTER 258 #define LABEL 259 #define HASH 260 #define CHAR 261 #define NEWLINE 262 #define NO_INDENT 263 #define RIGHT 264 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 27 "parse_y.y" { int def; char *string; } /* Line 1489 of yacc.c. */ #line 72 "parse_y.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE yylval; Linux-PAM-1.1.8/doc/specs/std-agent-id.raw0000644000000000000000000000560612160065211015000 00000000000000PAM working group ## A.G. Morgan ## $Id$ ## ## Pluggable Authentication Modules ## ## REGISTERED AGENTS AND THEIR AGENT-ID'S ## #$ Purpose of this document #$$#{definition} Definition of an agent-id The most complete version of a "PAM agent-id" is contained in this reference [#$R#{PAM_RFC2}]. A copy of a recent definition is reproduced here for convenience. The reader is recommended to consult reference [#{PAM_RFC2}] for definitions of other terms that are used in this document. ## -------------- ## The agent_id is a sequence of characters satisfying the following regexp: /^[a-z0-9\_]+(@[a-z0-9\_.]+)?$/ and has a specific form for each independent agent. o Agent_ids that do not contain an at-sign (@) are to be considered as representing some authentication mode that is a "public standard". Registered names MUST NOT contain an at-sign (@). o Anyone can define additional agents by using names in the format name@domainname, e.g. "ouragent@example.com". The part following the at-sign MUST be a valid fully qualified internet domain name [RFC-1034] controlled by the person or organization defining the name. (Said another way, if you control the email address that your agent has as an identifier, they you are entitled to use this identifier.) It is up to each domain how it manages its local namespace. ## -------------- ## #$ Registered agent-id's The structure of this section is a single subsection for each registered agent-id. This section includes a full definition of binary prompts accepted by the agent and example responses of said agent. Using the defining section alone, it should be possible for a third party to create a conforming agent and modules that can interoperate with other implementations of these objects. *$ "userpass" - the user+password agent Many legacy authentication systems are hardcoded to support one and only one authentication method. Namely, username: joe password: Indeed, this authentication method is often embedded into parts of the transport protocol. The "user+password" agent with PAM agent-id: "userpass" Is intended to support this legacy authentication scheme. The protocol for binary prompt exchange with this 'standard agent' is as follows: Case 1: module does not know the username, but expects the agent to obtain this information and also the user's password: module: {LENGTH;PAM_BP_SELECT;userpass;'/'} agent: {} Case 2: module has suggested username, but would like agent to confirm it and gather password: module: {} agent: {} Case 3: module knows username and will not permit the agent to change it: module: {} agent: {} #$ References [#{PAM_RFC2}] Internet draft, "Pluggable Authentication Modules (PAM)", available here: # http://linux.kernel.org/pub/linux/libs/pam/pre/doc/current-draft.txt # #$ Author's Address Andrew G. Morgan Email: morgan@kernel.org Linux-PAM-1.1.8/doc/specs/Makefile.am0000644000000000000000000000106712160065211014036 00000000000000# # Copyright (c) 2005, 2006, 2010 Thorsten Kukuk # CLEANFILES = draft-morgan-pam-current.txt *~ EXTRA_DIST = draft-morgan-pam.raw std-agent-id.raw rfc86.0.txt draft-morgan-pam-current.txt: padout draft-morgan-pam.raw ./padout < $(srcdir)/draft-morgan-pam.raw > draft-morgan-pam-current.txt AM_YFLAGS = -d CC = @CC_FOR_BUILD@ CFLAGS = @BUILD_CFLAGS@ LDFLAGS = @BUILD_LDFLAGS@ BUILT_SOURCES = parse_y.h noinst_PROGRAMS = padout padout_SOURCES = parse_l.l parse_y.y padout_LDADD = @LEXLIB@ doc_DATA = draft-morgan-pam-current.txt rfc86.0.txt Linux-PAM-1.1.8/doc/specs/parse_y.y0000644000000000000000000001201012160065211013624 00000000000000 %{ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #define MAXLINE 1000 #define INDENT_STRING " " #define PAPER_WIDTH 74 int indent=0; int line=1; char *last_label=NULL; extern int yylex(void); extern char *yytext; extern void yyerror(const char *x); extern char *get_label(const char *label); extern void set_label(const char *label, const char *target); char *new_counter(const char *key); %} %union { int def; char *string; } %token NEW_COUNTER LABEL HASH CHAR NEWLINE NO_INDENT RIGHT %type stuff text %start doc %% doc: | doc NEWLINE { printf("\n"); ++line; } | doc stuff NEWLINE { if (strlen($2) > (PAPER_WIDTH-(indent ? strlen(INDENT_STRING):0))) { yyerror("line too long"); } printf("%s%s\n", indent ? INDENT_STRING:"", $2); free($2); indent = 1; ++line; } | doc stuff RIGHT stuff NEWLINE { char fixed[PAPER_WIDTH+1]; int len; len = PAPER_WIDTH-(strlen($2)+strlen($4)); if (len >= 0) { memset(fixed, ' ', len); fixed[len] = '\0'; } else { yyerror("line too wide"); fixed[0] = '\0'; } printf("%s%s%s\n", $2, fixed, $4); free($2); free($4); indent = 1; ++line; } | doc stuff RIGHT stuff RIGHT stuff NEWLINE { char fixed[PAPER_WIDTH+1]; int len, l; len = PAPER_WIDTH-(strlen($2)+strlen($4)); if (len < 0) { len = 0; yyerror("line too wide"); } l = len/2; memset(fixed, ' ', l); fixed[l] = '\0'; printf("%s%s%s", $2, fixed, $4); free($2); free($4); l = (len+1)/2; memset(fixed, ' ', l); fixed[l] = '\0'; printf("%s%s\n", fixed, $6); free($6); indent = 1; ++line; } | doc stuff RIGHT stuff RIGHT stuff NEWLINE { char fixed[PAPER_WIDTH+1]; int len, l; len = PAPER_WIDTH-(strlen($2)+strlen($4)); if (len < 0) { len = 0; yyerror("line too wide"); } l = len/2; memset(fixed, ' ', l); fixed[l] = '\0'; printf("%s%s%s", $2, fixed, $4); free($2); free($4); l = (len+1)/2; memset(fixed, ' ', l); fixed[l] = '\0'; printf("%s%s\n", fixed, $6); free($6); indent = 1; ++line; } ; stuff: { $$ = strdup(""); } | stuff text { $$ = malloc(strlen($1)+strlen($2)+1); sprintf($$,"%s%s", $1, $2); free($1); free($2); } ; text: CHAR { $$ = strdup(yytext); } | text CHAR { $$ = malloc(strlen($1)+2); sprintf($$,"%s%s", $1, yytext); free($1); } | NO_INDENT { $$ = strdup(""); indent = 0; } | HASH { $$ = strdup("#"); } | LABEL { if (($$ = get_label(yytext)) == NULL) { set_label(yytext, last_label); $$ = strdup(""); } } | NEW_COUNTER { $$ = new_counter(yytext); } ; %% typedef struct node_s { struct node_s *left, *right; const char *key; char *value; } *node_t; node_t label_root = NULL; node_t counter_root = NULL; static const char *find_key(node_t root, const char *key) { while (root) { int cmp = strcmp(key, root->key); if (cmp > 0) { root = root->right; } else if (cmp) { root = root->left; } else { return root->value; } } return NULL; } static node_t set_key(node_t root, const char *key, const char *value) { if (root) { int cmp = strcmp(key, root->key); if (cmp > 0) { root->right = set_key(root->right, key, value); } else if (cmp) { root->left = set_key(root->left, key, value); } else { free(root->value); root->value = strdup(value); } } else { root = malloc(sizeof(struct node_s)); root->right = root->left = NULL; root->key = strdup(key); root->value = strdup(value); } return root; } void yyerror(const char *x) { fprintf(stderr, "line %d: %s\n", line, x); } char *get_label(const char *label) { const char *found = find_key(label_root, label); if (found) { return strdup(found); } return NULL; } void set_label(const char *label, const char *target) { if (target == NULL) { yyerror("no hanging value for label"); target = ""; /* avoid trigraph warning */ } label_root = set_key(label_root, label, target); } char *new_counter(const char *key) { int i=0, j, ndollars = 0; const char *old; char *new; if (key[i++] != '#') { yyerror("bad index"); return strdup(""); /* avoid trigraph warning */ } while (key[i] == '$') { ++ndollars; ++i; } key += i; old = find_key(counter_root, key); new = malloc(20*ndollars); if (old) { for (j=0; ndollars > 1 && old[j]; ) { if (old[j++] == '.' && --ndollars <= 0) { break; } } if (j) { strncpy(new, old, j); } if (old[j]) { i = atoi(old+j); } else { new[j++] = '.'; i = 0; } } else { j=0; while (--ndollars > 0) { new[j++] = '0'; new[j++] = '.'; } i = 0; } new[j] = '\0'; sprintf(new+j, "%d", ++i); counter_root = set_key(counter_root, key, new); if (last_label) { free(last_label); } last_label = strdup(new); return new; } int main(void) { return yyparse(); } Linux-PAM-1.1.8/doc/specs/parse_l.l0000644000000000000000000000073212160065211013602 00000000000000%{ #ifdef HAVE_CONFIG_H # include #endif #include #include "parse_y.h" %} %% \#[\$]+[a-zA-Z]*(\=[0-9]+)? return NEW_COUNTER; \#\{[a-zA-Z][a-zA-Z0-9\_]*\} return LABEL; \# return NO_INDENT; \#\# return RIGHT; \\\# return HASH; [^\n] return CHAR; [\n] return NEWLINE; %% Linux-PAM-1.1.8/doc/specs/parse_l.c0000644000000000000000000012754112216527633013616 00000000000000 #line 3 "parse_l.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart(yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart (FILE *input_file ); void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); void yy_delete_buffer (YY_BUFFER_STATE b ); void yy_flush_buffer (YY_BUFFER_STATE b ); void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); void yypop_buffer_state (void ); static void yyensure_buffer_stack (void ); static void yy_load_buffer_state (void ); static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); void yyfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef unsigned char YY_CHAR; FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #define yytext_ptr yytext static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 8 #define YY_END_OF_BUFFER 9 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[19] = { 0, 0, 0, 9, 6, 7, 3, 6, 4, 1, 0, 5, 0, 1, 0, 1, 0, 2, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 6, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 8, 1, 1, 9, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 10, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[12] = { 0, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2 } ; static yyconst flex_int16_t yy_base[21] = { 0, 0, 7, 21, 30, 30, 13, 17, 30, 20, 12, 30, 13, 10, 2, 7, 0, 30, 30, 27, 2 } ; static yyconst flex_int16_t yy_def[21] = { 0, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 9, 20, 18, 20, 18, 0, 18, 18 } ; static yyconst flex_int16_t yy_nxt[42] = { 0, 18, 5, 6, 16, 18, 18, 18, 7, 5, 6, 17, 15, 17, 18, 7, 8, 9, 15, 14, 11, 18, 18, 10, 9, 18, 12, 13, 4, 4, 3, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 } ; static yyconst flex_int16_t yy_chk[42] = { 0, 0, 1, 1, 20, 0, 0, 0, 1, 2, 2, 16, 15, 14, 13, 2, 6, 6, 12, 10, 7, 3, 0, 6, 9, 0, 9, 9, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "parse_l.l" #line 2 "parse_l.l" #ifdef HAVE_CONFIG_H # include #endif #include #include "parse_y.h" #line 469 "parse_l.c" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy (void ); int yyget_debug (void ); void yyset_debug (int debug_flag ); YY_EXTRA_TYPE yyget_extra (void ); void yyset_extra (YY_EXTRA_TYPE user_defined ); FILE *yyget_in (void ); void yyset_in (FILE * in_str ); FILE *yyget_out (void ); void yyset_out (FILE * out_str ); int yyget_leng (void ); char *yyget_text (void ); int yyget_lineno (void ); void yyset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap (void ); #else extern int yywrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex (void); #define YY_DECL int yylex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 11 "parse_l.l" #line 654 "parse_l.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 19 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 30 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 13 "parse_l.l" return NEW_COUNTER; YY_BREAK case 2: YY_RULE_SETUP #line 14 "parse_l.l" return LABEL; YY_BREAK case 3: YY_RULE_SETUP #line 15 "parse_l.l" return NO_INDENT; YY_BREAK case 4: YY_RULE_SETUP #line 16 "parse_l.l" return RIGHT; YY_BREAK case 5: YY_RULE_SETUP #line 17 "parse_l.l" return HASH; YY_BREAK case 6: YY_RULE_SETUP #line 18 "parse_l.l" return CHAR; YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP #line 19 "parse_l.l" return NEWLINE; YY_BREAK case 8: YY_RULE_SETUP #line 21 "parse_l.l" ECHO; YY_BREAK #line 778 "parse_l.c" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart(yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 19 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 19 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 18); return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart(yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_init_buffer(YY_CURRENT_BUFFER,input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void yy_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yy_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree((void *) b->yy_ch_buf ); yyfree((void *) b ); } #ifndef __cplusplus extern int isatty (int ); #endif /* __cplusplus */ /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; yy_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yy_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) { return yy_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ int yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /** Set the current line number. * @param line_number * */ void yyset_lineno (int line_number ) { yylineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * in_str ) { yyin = in_str ; } void yyset_out (FILE * out_str ) { yyout = out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int bdebug ) { yy_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = (FILE *) 0; yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return (void *) malloc( size ); } void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 21 "parse_l.l" Linux-PAM-1.1.8/doc/specs/Makefile.in0000644000000000000000000004603312216527535014067 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2010 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = padout$(EXEEXT) subdir = doc/specs DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in parse_l.c \ parse_y.c parse_y.h ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_padout_OBJECTS = parse_l.$(OBJEXT) parse_y.$(OBJEXT) padout_OBJECTS = $(am_padout_OBJECTS) padout_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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 $@ LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) LTLEXCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS) YLWRAP = $(top_srcdir)/build-aux/ylwrap YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS) SOURCES = $(padout_SOURCES) DIST_SOURCES = $(padout_SOURCES) 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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(doc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC_FOR_BUILD@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @BUILD_CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @BUILD_LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = draft-morgan-pam-current.txt *~ EXTRA_DIST = draft-morgan-pam.raw std-agent-id.raw rfc86.0.txt AM_YFLAGS = -d BUILT_SOURCES = parse_y.h padout_SOURCES = parse_l.l parse_y.y padout_LDADD = @LEXLIB@ doc_DATA = draft-morgan-pam-current.txt rfc86.0.txt all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .l .lo .o .obj .y $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/specs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/specs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list parse_y.h: parse_y.c @if test ! -f $@; then \ rm -f parse_y.c; \ $(MAKE) $(AM_MAKEFLAGS) parse_y.c; \ else :; fi padout$(EXEEXT): $(padout_OBJECTS) $(padout_DEPENDENCIES) @rm -f padout$(EXEEXT) $(LINK) $(padout_OBJECTS) $(padout_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_l.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_y.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 $@ $< .l.c: $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) .y.c: $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(docdir)" && rm -f $$files 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f parse_l.c -rm -f parse_y.c -rm -f parse_y.h -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -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-docDATA .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS 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-docDATA 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 uninstall-docDATA draft-morgan-pam-current.txt: padout draft-morgan-pam.raw ./padout < $(srcdir)/draft-morgan-pam.raw > draft-morgan-pam-current.txt # 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: Linux-PAM-1.1.8/doc/specs/parse_y.c0000644000000000000000000013475412216527633013637 00000000000000/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 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, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { NEW_COUNTER = 258, LABEL = 259, HASH = 260, CHAR = 261, NEWLINE = 262, NO_INDENT = 263, RIGHT = 264 }; #endif /* Tokens. */ #define NEW_COUNTER 258 #define LABEL 259 #define HASH 260 #define CHAR 261 #define NEWLINE 262 #define NO_INDENT 263 #define RIGHT 264 /* Copy the first part of user declarations. */ #line 2 "parse_y.y" #ifdef HAVE_CONFIG_H # include #endif #include #include #include #define MAXLINE 1000 #define INDENT_STRING " " #define PAPER_WIDTH 74 int indent=0; int line=1; char *last_label=NULL; extern int yylex(void); extern char *yytext; extern void yyerror(const char *x); extern char *get_label(const char *label); extern void set_label(const char *label, const char *target); char *new_counter(const char *key); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 27 "parse_y.y" { int def; char *string; } /* Line 187 of yacc.c. */ #line 144 "parse_y.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 157 "parse_y.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 27 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 10 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 4 /* YYNRULES -- Number of rules. */ #define YYNRULES 15 /* YYNRULES -- Number of states. */ #define YYNSTATES 19 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 264 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 4, 7, 11, 17, 25, 33, 34, 37, 39, 42, 44, 46, 48 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 11, 0, -1, -1, 11, 7, -1, 11, 12, 7, -1, 11, 12, 9, 12, 7, -1, 11, 12, 9, 12, 9, 12, 7, -1, 11, 12, 9, 12, 9, 12, 7, -1, -1, 12, 13, -1, 6, -1, 13, 6, -1, 8, -1, 5, -1, 4, -1, 3, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 39, 39, 40, 44, 53, 72, 99, 128, 131, 139, 142, 147, 151, 154, 160 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "NEW_COUNTER", "LABEL", "HASH", "CHAR", "NEWLINE", "NO_INDENT", "RIGHT", "$accept", "doc", "stuff", "text", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 10, 11, 11, 11, 11, 11, 11, 12, 12, 13, 13, 13, 13, 13, 13 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 3, 5, 7, 7, 0, 2, 1, 2, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 2, 8, 1, 3, 0, 15, 14, 13, 10, 4, 12, 8, 9, 0, 11, 5, 8, 0, 6 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 1, 4, 12 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -3 static const yytype_int8 yypact[] = { -3, 0, -3, -3, 5, -3, -3, -3, -3, -3, -3, -3, 17, 12, -3, -3, -3, -2, -3 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -3, -3, 11, -3 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 2, 5, 6, 7, 8, 18, 10, 3, 5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 15, 10, 16, 13, 14, 0, 0, 0, 17 }; static const yytype_int8 yycheck[] = { 0, 3, 4, 5, 6, 7, 8, 7, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6, 7, 8, 9, 11, 6, -1, -1, -1, 16 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 11, 0, 7, 12, 3, 4, 5, 6, 7, 8, 9, 13, 12, 6, 7, 9, 12, 7 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 3: #line 40 "parse_y.y" { printf("\n"); ++line; } break; case 4: #line 44 "parse_y.y" { if (strlen((yyvsp[(2) - (3)].string)) > (PAPER_WIDTH-(indent ? strlen(INDENT_STRING):0))) { yyerror("line too long"); } printf("%s%s\n", indent ? INDENT_STRING:"", (yyvsp[(2) - (3)].string)); free((yyvsp[(2) - (3)].string)); indent = 1; ++line; } break; case 5: #line 53 "parse_y.y" { char fixed[PAPER_WIDTH+1]; int len; len = PAPER_WIDTH-(strlen((yyvsp[(2) - (5)].string))+strlen((yyvsp[(4) - (5)].string))); if (len >= 0) { memset(fixed, ' ', len); fixed[len] = '\0'; } else { yyerror("line too wide"); fixed[0] = '\0'; } printf("%s%s%s\n", (yyvsp[(2) - (5)].string), fixed, (yyvsp[(4) - (5)].string)); free((yyvsp[(2) - (5)].string)); free((yyvsp[(4) - (5)].string)); indent = 1; ++line; } break; case 6: #line 72 "parse_y.y" { char fixed[PAPER_WIDTH+1]; int len, l; len = PAPER_WIDTH-(strlen((yyvsp[(2) - (7)].string))+strlen((yyvsp[(4) - (7)].string))); if (len < 0) { len = 0; yyerror("line too wide"); } l = len/2; memset(fixed, ' ', l); fixed[l] = '\0'; printf("%s%s%s", (yyvsp[(2) - (7)].string), fixed, (yyvsp[(4) - (7)].string)); free((yyvsp[(2) - (7)].string)); free((yyvsp[(4) - (7)].string)); l = (len+1)/2; memset(fixed, ' ', l); fixed[l] = '\0'; printf("%s%s\n", fixed, (yyvsp[(6) - (7)].string)); free((yyvsp[(6) - (7)].string)); indent = 1; ++line; } break; case 7: #line 99 "parse_y.y" { char fixed[PAPER_WIDTH+1]; int len, l; len = PAPER_WIDTH-(strlen((yyvsp[(2) - (7)].string))+strlen((yyvsp[(4) - (7)].string))); if (len < 0) { len = 0; yyerror("line too wide"); } l = len/2; memset(fixed, ' ', l); fixed[l] = '\0'; printf("%s%s%s", (yyvsp[(2) - (7)].string), fixed, (yyvsp[(4) - (7)].string)); free((yyvsp[(2) - (7)].string)); free((yyvsp[(4) - (7)].string)); l = (len+1)/2; memset(fixed, ' ', l); fixed[l] = '\0'; printf("%s%s\n", fixed, (yyvsp[(6) - (7)].string)); free((yyvsp[(6) - (7)].string)); indent = 1; ++line; } break; case 8: #line 128 "parse_y.y" { (yyval.string) = strdup(""); } break; case 9: #line 131 "parse_y.y" { (yyval.string) = malloc(strlen((yyvsp[(1) - (2)].string))+strlen((yyvsp[(2) - (2)].string))+1); sprintf((yyval.string),"%s%s", (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].string)); free((yyvsp[(1) - (2)].string)); free((yyvsp[(2) - (2)].string)); } break; case 10: #line 139 "parse_y.y" { (yyval.string) = strdup(yytext); } break; case 11: #line 142 "parse_y.y" { (yyval.string) = malloc(strlen((yyvsp[(1) - (2)].string))+2); sprintf((yyval.string),"%s%s", (yyvsp[(1) - (2)].string), yytext); free((yyvsp[(1) - (2)].string)); } break; case 12: #line 147 "parse_y.y" { (yyval.string) = strdup(""); indent = 0; } break; case 13: #line 151 "parse_y.y" { (yyval.string) = strdup("#"); } break; case 14: #line 154 "parse_y.y" { if (((yyval.string) = get_label(yytext)) == NULL) { set_label(yytext, last_label); (yyval.string) = strdup(""); } } break; case 15: #line 160 "parse_y.y" { (yyval.string) = new_counter(yytext); } break; /* Line 1267 of yacc.c. */ #line 1523 "parse_y.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (yymsg); } else { yyerror (YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 165 "parse_y.y" typedef struct node_s { struct node_s *left, *right; const char *key; char *value; } *node_t; node_t label_root = NULL; node_t counter_root = NULL; static const char *find_key(node_t root, const char *key) { while (root) { int cmp = strcmp(key, root->key); if (cmp > 0) { root = root->right; } else if (cmp) { root = root->left; } else { return root->value; } } return NULL; } static node_t set_key(node_t root, const char *key, const char *value) { if (root) { int cmp = strcmp(key, root->key); if (cmp > 0) { root->right = set_key(root->right, key, value); } else if (cmp) { root->left = set_key(root->left, key, value); } else { free(root->value); root->value = strdup(value); } } else { root = malloc(sizeof(struct node_s)); root->right = root->left = NULL; root->key = strdup(key); root->value = strdup(value); } return root; } void yyerror(const char *x) { fprintf(stderr, "line %d: %s\n", line, x); } char *get_label(const char *label) { const char *found = find_key(label_root, label); if (found) { return strdup(found); } return NULL; } void set_label(const char *label, const char *target) { if (target == NULL) { yyerror("no hanging value for label"); target = ""; /* avoid trigraph warning */ } label_root = set_key(label_root, label, target); } char *new_counter(const char *key) { int i=0, j, ndollars = 0; const char *old; char *new; if (key[i++] != '#') { yyerror("bad index"); return strdup(""); /* avoid trigraph warning */ } while (key[i] == '$') { ++ndollars; ++i; } key += i; old = find_key(counter_root, key); new = malloc(20*ndollars); if (old) { for (j=0; ndollars > 1 && old[j]; ) { if (old[j++] == '.' && --ndollars <= 0) { break; } } if (j) { strncpy(new, old, j); } if (old[j]) { i = atoi(old+j); } else { new[j++] = '.'; i = 0; } } else { j=0; while (--ndollars > 0) { new[j++] = '0'; new[j++] = '.'; } i = 0; } new[j] = '\0'; sprintf(new+j, "%d", ++i); counter_root = set_key(counter_root, key, new); if (last_label) { free(last_label); } last_label = strdup(new); return new; } int main(void) { return yyparse(); } Linux-PAM-1.1.8/doc/specs/rfc86.0.txt0000644000000000000000000020455412160065211013637 00000000000000 Open Software Foundation V. Samar (SunSoft) Request For Comments: 86.0 R. Schemers (SunSoft) October 1995 UNIFIED LOGIN WITH PLUGGABLE AUTHENTICATION MODULES (PAM) 1. INTRODUCTION Since low-level authentication mechanisms constantly evolve, it is important to shield the high-level consumers of these mechanisms (system-entry services and users) from such low-level changes. With the Pluggable Authentication Module (PAM) framework, we can provide pluggability for a variety of system-entry services -- not just system authentication _per se_, but also for account, session and password management. PAM's ability to _stack_ authentication modules can be used to integrate `login' with different authentication mechanisms such as RSA, DCE, and Kerberos, and thus unify login mechanisms. The PAM framework can also provide easy integration of smart cards into the system. Modular design and pluggability have become important for users who want ease of use. In the PC hardware arena, no one wants to set the interrupt vector numbers or resolve the addressing conflict between various devices. In the software arena, people also want to be able to replace components easily for easy customization, maintenance, and upgrades. Authentication software deserves special attention because authentication forms a very critical component of any secure computer system. The authentication infrastructure and its components may have to be modified or replaced either because some deficiencies have been found in the current algorithms, or because sites want to enforce a different security policy than what was provided by the system vendor. The replacement and modification should be done in such a way that the user is not affected by these changes. The solution has to address not just how the applications use the new authentication mechanisms in a generic fashion, but also how the user will be authenticated to these mechanisms in a generic way. The former is addressed by GSS-API [Linn 93], while this RFC addresses the later; these two efforts are complementary to each other. Since most system-entry services (for example, `login', `dtlogin', `rlogin', `ftp', `rsh') may want to be independent of the specific authentication mechanisms used by the machine, it is important that there be a framework for _plugging_ in various mechanisms. This requires that the system applications use a standard API to interact Samar, Schemers Page 1 OSF-RFC 86.0 PAM October 1995 with the authentication services. If these system-entry services remain independent of the actual mechanism used on that machine, the system administrator can install suitable authentication modules without requiring changes to these applications. For any security system to be successful, it has to be easy to use. In the case of authentication, the single most important ease-of-use characteristic is that the user should not be required to learn about various ways of authentication and remember multiple passwords. Ideally, there should be one all-encompassing authentication system where there is only one password, but for heterogeneous sites, multiple authentication mechanisms have to co-exist. The problem of integrating multiple authentication mechanisms such as Kerberos [Steiner 88], RSA [Rivest 78], and Diffie-Hellman [Diffie 76, Taylor 88], is also referred to as _integrated login_, or _unified login_ problem. Even if the user has to use multiple authentication mechanisms, the user should not be forced to type multiple passwords. Furthermore, the user should be able to use the new network identity without taking any further actions. The key here is in modular integration of the network authentication technologies with `login' and other system-entry services. In this RFC we discuss the architecture and design of pluggable authentication modules. This design gives the capability to use field-replaceable authentication modules along with unified login capability. It thus provides for both _pluggability_ and _ease-of- use_. The RFC is organized as follows. We first motivate the need for a generic way to authenticate the user by various system-entry services within the operating system. We describe the goals and constraints of the design. This leads to the architecture, description of the interfaces, and _stacking_ of modules to get unified login functionality. We then describe our experience with the design, and end with a description of future work. 2. OVERVIEW OF IDENTIFICATION AND AUTHENTICATION MECHANISMS An identification and authentication ("I&A") mechanism is used to establish a user's identity the system (i.e., to a local machine's operating system) and to other principals on the network. On a typical UNIX system, there are various ports of entry into the system, such as `login', `dtlogin', `rlogin', `ftp', `rsh', `su', and `telnet'. In all cases, the user has to be identified and authenticated before granting appropriate access rights to the user. The user identification and authentication for all these entry points needs to be coordinated to ensure a secure system. In most of the current UNIX systems, the login mechanism is based upon verification of the password using the modified DES algorithm. Samar, Schemers Page 2 OSF-RFC 86.0 PAM October 1995 The security of the implementation assumes that the password cannot be guessed, and that the password does not go over the wire in the clear. These assumptions, however, are not universally valid. Various programs are now available freely on the Internet that can run dictionary attack against the encrypted password. Further, some of the network services (for example, `rlogin', `ftp', `telnet') send the password over in clear, and there are "sniffer" programs freely available to steal these passwords. The classical assumptions may be acceptable on a trusted network, but in an open environment there is a need to use more restrictive and stronger authentication mechanisms. Examples of such mechanisms include Kerberos, RSA, Diffie-Hellman, one-time password [Skey 94], and challenge-response based smart card authentication systems. Since this list will continue to evolve, it is important that the system-entry services do not have hard-coded dependencies on any of these authentication mechanisms. 3. DESIGN GOALS The goals of the PAM framework are as follows: (a) The system administrator should be able to choose the default authentication mechanism for the machine. This can range from a simple password-based mechanism to a biometric or a smart card based system. (b) It should be possible to configure the user authentication mechanism on a per application basis. For example, a site may require S/Key password authentication for `telnet' access, while allowing machine `login' sessions with just UNIX password authentication. (c) The framework should support the display requirements of the applications. For example, for a graphical login session such as `dtlogin', the user name and the password may have to be entered in a new window. For networking system-entry applications such as `ftp' and `telnet', the user name and password has to be transmitted over the network to the client machine. (d) It should be possible to configure multiple authentication protocols for each of those applications. For example, one may want the users to get authenticated by both Kerberos and RSA authentication systems. (e) The system administrator should be able to _stack_ multiple user authentication mechanisms such that the user is authenticated with all authentication protocols without retyping the password. Samar, Schemers Page 3 OSF-RFC 86.0 PAM October 1995 (f) The architecture should allow for multiple passwords if necessary to achieve higher security for users with specific security requirements. (g) The system-entry services should not be required to change when the underlying mechanism changes. This can be very useful for third-party developers because they often do not have the source code for these services. (h) The architecture should provide for a _pluggable_ model for system authentication, as well as for other related tasks such as password, account, and session management. (i) For backward-compatibility reasons, the PAM API should support the authentication requirements of the current system-entry services. There are certain issues that the PAM framework does not specifically address: (a) We focus only on providing a generic scheme through which users use passwords to establish their identities to the machine. Once the identity is established, how the identity is communicated to other interested parties is outside the scope of this design. There are efforts underway at IETF [Linn 93] to develop a Generic Security Services Application Interface (GSSAPI) that can be used by applications for secure and authenticated communication without knowing the underlying mechanism. (b) The _single-signon_ problem of securely transferring the identity of the caller to a remote site is not addressed. For example, the problem of delegating credentials from the `rlogin' client to the other machine without typing the password is not addressed by our work. We also do not address the problem of sending the passwords over the network in the clear. (c) We do not address the source of information obtained from the "`getXbyY()'" family of calls (e.g., `getpwnam()'). Different operating systems address this problem differently. For example, Solaris uses the name service switch (NSS) to determine the source of information for the "`getXbyY()'" calls. It is expected that data which is stored in multiple sources (such as passwd entries in NIS+ and the DCE registry) is kept in sync using the appropriate commands (such as `passwd_export'). Samar, Schemers Page 4 OSF-RFC 86.0 PAM October 1995 4. OVERVIEW OF THE PAM FRAMEWORK We propose that the goals listed above can be met through a framework in which authentication modules can be _plugged_ independently of the application. We call this the _Pluggable Authentication Modules_ (PAM) framework. The core components of the PAM framework are the authentication library API (the front end) and the authentication mechanism-specific modules (the back end), connected through the Service Provider Interface (SPI). Applications write to the PAM API, while the authentication-system providers write to the PAM SPI and supply the back end modules that are independent of the application. ftp telnet login (Applications) | | | | | | +--------+--------+ | +-----+-----+ | PAM API | <-- pam.conf file +-----+-----+ | +--------+--------+ UNIX Kerberos Smart Cards (Mechanisms) Figure 1: The Basic PAM Architecture Figure 1 illustrates the relationship between the application, the PAM library, and the authentication modules. Three applications (`login', `telnet' and `ftp') are shown which use the PAM authentication interfaces. When an application makes a call to the PAM API, it loads the appropriate authentication module as determined by the configuration file, `pam.conf'. The request is forwarded to the underlying authentication module (for example, UNIX password, Kerberos, smart cards) to perform the specified operation. The PAM layer then returns the response from the authentication module to the application. PAM unifies system authentication and access control for the system, and allows plugging of associated authentication modules through well defined interfaces. The plugging can be defined through various means, one of which uses a configuration file, such as the one in Table 1. For each of the system applications, the file specifies the authentication module that should be loaded. In the example below, `login' uses the UNIX password module, while `ftp' and `telnet' use the S/Key module. Samar, Schemers Page 5 OSF-RFC 86.0 PAM October 1995 Table 1: A Simplified View of a Sample PAM Configuration File. service module_path ------- ----------- login pam_unix.so ftp pam_skey.so telnet pam_skey.so Authentication configuration is only one aspect of this interface. Other critical components include account management, session management, and password management. For example, the `login' program may want to verify not only the password but also whether the account has aged or expired. Generic interfaces also need to be provided so that the password can be changed according to the requirements of the module. Furthermore, the application may want to log information about the current session as determined by the module. Not all applications or services may need all of the above components, and not each authentication module may need to provide support for all of the interfaces. For example, while `login' may need access to all four components, `su' may need access to just the authentication component. Some applications may use some specific authentication and password management modules but share the account and session management modules with others. This reasoning leads to a partitioning of the entire set of interfaces into four areas of functionality: (1) authentication, (2) account, (3) session, and (4) password. The concept of PAM was extended to these functional areas by implementing each of them as a separate pluggable module. Breaking the functionality into four modules helps the module providers because they can use the system-provided libraries for the modules that they are not changing. For example, if a supplier wants to provide a better version of Kerberos, they can just provide that new authentication and password module, and reuse the existing ones for account and session. 4.1. Module Description More details on specific API's are described in Appendix A. A brief description of four modules follows: (a) Authentication management: This set includes the `pam_authenticate()' function to authenticate the user, and the `pam_setcred()' interface to set, refresh or destroy the user credentials. (b) Account management: This set includes the `pam_acct_mgmt()' function to check whether the authenticated user should be Samar, Schemers Page 6 OSF-RFC 86.0 PAM October 1995 given access to his/her account. This function can implement account expiration and access hour restrictions. (c) Session management: This set includes the `pam_open_session()' and `pam_close_session()' functions for session management and accounting. For example, the system may want to store the total time for the session. (d) Password management: This set includes a function, `pam_chauthtok()', to change the password. 5. FRAMEWORK INTERFACES The PAM framework further provides a set of administrative interfaces to support the above modules and to provide for application-module communication. There is no corresponding service provider interface (SPI) for such functions. 5.1. Administrative Interfaces Each set of PAM transactions starts with `pam_start()' and ends with the `pam_end()' function. The interfaces `pam_get_item()' and `pam_set_item()' are used to read and write the state information associated with the PAM transaction. If there is any error with any of the PAM interfaces, the error message can be printed with `pam_strerror()'. 5.2. Application-Module Communication During application initialization, certain data such as the user name is saved in the PAM framework layer through `pam_start()' so that it can be used by the underlying modules. The application can also pass opaque data to the module which the modules will pass back while communicating with the user. 5.3. User-Module Communication The `pam_start()' function also passes conversation function that has to be used by the underlying modules to read and write module specific authentication information. For example, these functions can be used to prompt the user for the password in a way determined by the application. PAM can thus be used by graphical, non- graphical, or networked applications. Samar, Schemers Page 7 OSF-RFC 86.0 PAM October 1995 5.4. Inter-Module Communication Though the modules are independent, they can share certain common information about the authentication session such as user name, service name, password, and conversation function through the `pam_get_item()' and `pam_set_item()' interfaces. These API's can also be used by the application to change the state information after having called `pam_start()' once. 5.5. Module State Information The PAM service modules may want to keep certain module-specific state information about the session. The interfaces `pam_get_data()' and `pam_set_data()' can be used by the service modules to access and update module-specific information as needed from the PAM handle. The modules can also attach a cleanup function with the data. The cleanup function is executed when `pam_end()' is called to indicate the end of the current authentication activity. Since the PAM modules are loaded upon demand, there is no direct module initialization support in the PAM framework. If there are certain initialization tasks that the PAM service modules have to do, they should be done upon the first invocation. However, if there are certain clean-up tasks to be done when the authentication session ends, the modules should use `pam_set_data()' to specify the clean-up functions, which would be called when `pam_end()' is called by the application. 6. MODULE CONFIGURATION MANAGEMENT Table 2 shows an example of a configuration file `pam.conf' with support for authentication, session, account, and password management modules. `login' has three entries: one each for authentication processing, session management and account management. Each entry specifies the module name that should be loaded for the given module type. In this example, the `ftp' service uses the authentication and session modules. Note that all services here share the same session management module, while having different authentication modules. Samar, Schemers Page 8 OSF-RFC 86.0 PAM October 1995 Table 2: Configuration File (pam.conf) with Different Modules and Control Flow service module_type control_flag module_path options ------- ----------- ------------ ----------- ------- login auth required pam_unix_auth.so nowarn login session required pam_unix_session.so login account required pam_unix_account.so ftp auth required pam_skey_auth.so debug ftp session required pam_unix_session.so telnet session required pam_unix_session.so login password required pam_unix_passwd.so passwd password required pam_unix_passwd.so OTHER auth required pam_unix_auth.so OTHER session required pam_unix_session.so OTHER account required pam_unix_account.so The first field, _service_, denotes the service (for example, `login', `passwd', `rlogin'). The name `OTHER' indicates the module used by all other applications that have not been specified in this file. This name can also be used if all services have the same requirements. In the example, since all the services use the same session module, we could have replaced those lines with a single `OTHER' line. The second field, _module_type_, indicates the type of the PAM functional module. It can be one of `auth', `account', `session', or `password' modules. The third field, _control_flag_ determines the behavior of stacking multiple modules by specifying whether any particular module is _required_, _sufficient_, or _optional_. The next section describes stacking in more detail. The fourth field, _module_path_, specifies the location of the module. The PAM framework loads this module upon demand to invoke the required function. The fifth field, _options_, is used by the PAM framework layer to pass module specific options to the modules. It is up to the module to parse and interpret the options. This field can be used by the modules to turn on debugging or to pass any module specific parameters such as a timeout value. It is also used to support unified login as described below. The options field can be used by the system administrator to fine-tune the PAM modules. If any of the fields are invalid, or if a module is not found, that line is ignored and the error is logged as a critical error via `syslog(3)'. If no entries are found for the given module type, then the PAM framework returns an error to the application. Samar, Schemers Page 9 OSF-RFC 86.0 PAM October 1995 7. INTEGRATING MULTIPLE AUTHENTICATION SERVICES WITH STACKING In the world of heterogeneous systems, the system administrator often has to deal with the problem of integrating multiple authentication mechanisms. The user is often required to know about the authentication command of the new authentication module (for example, `kinit', `dce_login') after logging into the system. This is not user-friendly because it forces people to remember to type the new command and enter the new password. This functionality should be invisible instead of burdening the user with it. There are two problems to be addressed here: (a) Supporting multiple authentication mechanisms. (b) Providing unified login in the presence of multiple mechanisms. In the previous section, we described how one could replace the default authentication module with any other module of choice. Now we demonstrate how the same model can be extended to provide support for multiple modules. 7.1. Design for Stacked Modules One possibility was to provide hard-coded rules in `login' or other applications requiring authentication services [Adamson 95]. But this becomes very specific to the particular combination of authentication protocols, and also requires the source code of the application. Digital's Security Integration Architecture [SIA 95] addresses this problem by specifying the same list of authentication modules for all applications. Since requirements for various applications can vary, it is essential that the configuration be on a per-application basis. To support multiple authentication mechanisms, the PAM framework was extended to support _stacking_. When any API is called, the back ends for the stacked modules are invoked in the order listed, and the result returned to the caller. In Figure 2, the authentication service of `login' is stacked and the user is authenticated by UNIX, Kerberos, and RSA authentication mechanisms. Note that in this example, there is no stacking for session or account management modules. Samar, Schemers Page 10 OSF-RFC 86.0 PAM October 1995 login | +--------+--------+ | | | session auth account | | | +--+--+ +--+--+ +--+--+ | PAM | | PAM | | PAM | +--+--+ +--+--+ +--+--+ | | | UNIX UNIX UNIX session auth account | Kerberos auth | RSA auth Figure 2: Stacking With the PAM Architecture Stacking is specified through additional entries in the configuration file shown earlier. As shown in Table 2, for each application (such as `login') the configuration file can specify multiple mechanisms that have to be invoked in the specified order. When mechanisms fail, the _control_flag_ decides which error should be returned to the application. Since the user should not know which authentication module failed when a bad password was typed, the PAM framework continues to call other authentication modules on the stack even on failure. The semantics of the control flag are as follows: (a) `required': With this flag, the module failure results in the PAM framework returning the error to the caller _after_ executing all other modules on the stack. For the function to be able to return success to the application all `required' modules have to report success. This flag is normally set when authentication by this module is a _must_. (b) `optional': With this flag, the PAM framework ignores the module failure and continues with the processing of the next module in sequence. This flag is used when the user is allowed to login even if that particular module has failed. (c) `sufficient': With this flag, if the module succeeds the PAM framework returns success to the application immediately without trying any other modules. For failure cases, the _sufficient_ modules are treated as `optional'. Table 3 shows a sample configuration file that stacks the `login' command. Here the user is authenticated by UNIX, Kerberos, and RSA authentication services. The `required' key word for _control_flag_ Samar, Schemers Page 11 OSF-RFC 86.0 PAM October 1995 enforces that the user is allowed to login only if he/she is authenticated by _both_ UNIX and Kerberos services. RSA authentication is optional by virtue of the `optional' key word in the _control_flag_ field. The user can still log in even if RSA authentication fails. Table 3: PAM Configuration File with Support for Stacking service module_type control_flag module_path options ------- ----------- ------------ ----------- ------- login auth required pam_unix.so debug login auth required pam_kerb.so use_mapped_pass login auth optional pam_rsa.so use_first_pass Table 4 illustrates the use of the sufficient flag for the `rlogin' service. The Berkeley `rlogin' protocol specifies that if the remote host is trusted (as specified in the `/etc/hosts.equiv' file or in the `.rhosts' file in the home directory of the user), then the `rlogin' daemon should not require the user to type the password. If this is not the case, then the user is required to type the password. Instead of hard coding this policy in the `rlogin' daemon, this can be expressed with the `pam.conf' file in Table 4. The PAM module `pam_rhosts_auth.so.1' implements the `.rhosts' policy described above. If a site administrator wants to enable remote login with only passwords, then the first line should be deleted. Table 4: PAM Configuration File for the rlogin service service module_type control_flag module_path options ------- ----------- ------------ ----------- ------- rlogin auth sufficient pam_rhosts_auth.so rlogin auth required pam_unix.so 7.2. Password-Mapping Multiple authentication mechanisms on a machine can lead to multiple passwords that users have to remember. One attractive solution from the ease-of-use viewpoint is to use the same password for all mechanisms. This, however, can also weaken the security because if that password were to be compromised in any of the multiple mechanisms, all mechanisms would be compromised at the same time. Furthermore, different authentication mechanisms may have their own distinctive password requirements in regards to its length, allowed characters, time interval between updates, aging, locking, and so forth. These requirements make it problematic to use the same password for multiple authentication mechanisms. The solution we propose, while not precluding use of the same password for every mechanism, allows for a different password for each mechanism through what we call _password-mapping_. This basically means using the user's _primary_ password to encrypt the Samar, Schemers Page 12 OSF-RFC 86.0 PAM October 1995 user's other (_secondary_) passwords, and storing these encrypted passwords in a place where they are available to the user. Once the primary password is verified, the authentication modules would obtain the other passwords for their own mechanisms by decrypting the mechanism-specific encrypted password with the primary password, and passing it to the authentication service. The security of this design for password-mapping assumes that the primary password is the user's strongest password, in terms of its unguessability (length, type and mix of characters used, etc.). If there is any error in password-mapping, or if the mapping does not exist, the user will be prompted for the password by each authentication module. To support password-mapping, the PAM framework saves the primary password and provides it to stacked authentication modules. The password is cleared out before the `pam_authenticate' function returns. How the password is encrypted depends completely on the module implementation. The encrypted secondary password (also called a "mapped password") can be stored in a trusted or untrusted place, such as a smart card, a local file, or a directory service. If the encrypted passwords are stored in an untrusted publicly accessible place, this does provide an intruder with opportunities for potential dictionary attack. Though password-mapping is voluntary, it is recommended that all module providers add support for the following four mapping options: (a) `use_first_pass': Use the same password used by the first mechanism that asked for a password. The module should not ask for the password if the user cannot be authenticated by the first password. This option is normally used when the system administrator wants to enforce the same password across multiple modules. (b) `try_first_pass': This is the same as `use_first_pass', except that if the primary password is not valid, it should prompt the user for the password. (c) `use_mapped_pass': Use the password-mapping scheme to get the actual password for this module. One possible implementation is to get the mapped-password using the XFN API [XFN 94], and decrypt it with the primary password to get the module-specific password. The module should not ask for the password if the user cannot be authenticated by the first password. The XFN API allows user-defined attributes (such as _mapped-password_) to be stored in the _user-context_. Using the XFN API is particularly attractive because support for the XFN may be found on many systems in the future. Samar, Schemers Page 13 OSF-RFC 86.0 PAM October 1995 (d) `try_mapped_pass': This is the same as `use_mapped_pass', except that if the primary password is not valid, it should prompt the user for the password. When passwords get updated, the PAM framework stores both the old as well as the new password to be able to inform other dependent authentication modules about the change. Other modules can use this information to update the encrypted password without forcing the user to type the sequence of passwords again. The PAM framework clears out the passwords before returning to the application. Table 3 illustrates how the same password can be used by `login' for authenticating to the standard UNIX login, Kerberos and RSA services. Once the user has been authenticated to the primary authentication service (UNIX `login' in this example) with the primary password, the option `use_mapped_pass' indicates to the Kerberos module that it should use the primary password to decrypt the stored Kerberos password and then use the Kerberos password to get the ticket for the ticket-granting-service. After that succeeds, the option `use_first_pass' indicates to the RSA module that instead of prompting the user for a password, it should use the primary password typed earlier for authenticating the user. Note that in this scenario, the user has to enter the password just once. Note that if a one-time password scheme (e.g., S/Key) is used, password mapping cannot apply. 7.3. Implications of Stacking on the PAM Design Because of the stacking capability of PAM, we have designed the PAM API's to not return any data to the application, except status. If this were not the case, it would be difficult for the PAM framework to decide which module should return data to the application. When there is any error, the application does not know which of the modules failed. This behavior enables (even requires) the application to be completely independent from the modules. Another design decision we have made is that PAM gives only the user name to all the underlying PAM modules, hence it is the responsibility of the PAM modules to convert the name to their own internal format. For example, the Kerberos module may have to convert the UNIX user name to a Kerberos principal name. Stacking also forces the modules to be designed such that they can occur anywhere in the stack without any side-effects. Since modules such as the authentication and the password module are very closely related, it is important they be configured in the same order and with compatible options. Samar, Schemers Page 14 OSF-RFC 86.0 PAM October 1995 8. INTEGRATION WITH SMART CARDS Many networking authentication protocols require possession of a long key to establish the user identity. For ease-of-use reasons, that long key is normally encrypted with the user's password so that the user is not required to memorize it. However, weak passwords can be compromised through a dictionary attack and thus undermine the stronger network authentication mechanism. Furthermore, the encrypted data is normally stored in a centrally accessible service whose availability depends upon the reliability of the associated service. Solutions have been proposed to use a pass-phrase or one- time-password, but those are much longer than the regular eight character passwords traditionally used with UNIX `login'. This makes the solution user-unfriendly because it requires longer strings to be remembered and typed. For most authentication protocol implementations, the trust boundary is the local machine. This assumption may not be valid in cases where the user is mobile and has to use publicly available networked computers. In such cases, it is required that the clear text of the key or the password never be made available to the machine. Smart cards solve the above problems by reducing password exposure by supporting a _two factor_ authentication mechanism: the first with the possession of the card, and the second with the knowledge of the PIN associated with the card. Not only can the smart cards be a secure repository of multiple passwords, they can also provide the encryption and authentication functions such that the long (private) key is never exposed outside the card. The PAM framework allows for integrating smart cards to the system by providing a smart card specific module for authentication. Furthermore, the unified login problem is simplified because the multiple passwords for various authentication mechanisms can be stored on the smart card itself. This can be enabled by adding a suitable key-word such as `use_smart_card' in the _options_ field. 9. SECURITY ISSUES It is important to understand the impact of PAM on the security of any system so that the site-administrator can make an informed decision. (a) Sharing of passwords with multiple authentication mechanisms. If there are multiple authentication modules, one possibility is to use the same password for all of them. If the password for any of the multiple authentication system is compromised, the user's password in all systems would be compromised. If this is a concern, then multiple passwords might be considered Samar, Schemers Page 15 OSF-RFC 86.0 PAM October 1995 at the cost of ease-of-use. (b) Password-mapping. This technique of encrypting all other passwords with the primary password assumes that it is lot more difficult to crack the primary password and that reasonable steps have been taken to ensure limited availability of the encrypted primary password. If this is not done, an intruder could target the primary password as the first point of dictionary attack. If one of the other modules provide stronger security than the password based security, the site would be negating the strong security by using password-mapping. If this is a concern, then multiple passwords might be considered at the cost of ease-of- use. If smart cards are used, they obviate the need for password-mapping completely. (c) Security of the configuration file. Since the policy file dictates how the user is authenticated, this file should be protected from unauthorized modifications. (d) Stacking various PAM modules. The system administrator should fully understand the implications of stacking various modules that will be installed on the system and their respective orders and interactions. The composition of various authentication modules should be carefully examined. The trusted computing base of the machine now includes the PAM modules. 10. EXPERIENCE WITH PAM The PAM framework was first added in Solaris 2.3 release as a private internal interface. PAM is currently being used by several system entry applications such as `login', `passwd', `su', `dtlogin', `rlogind', `rshd', `telnetd', `ftpd', `in.rexecd', `uucpd', `init', `sac', and `ttymon'. We have found that PAM provides an excellent framework to encapsulate the authentication-related tasks for the entire system. The Solaris 2.3 PAM API's were hence enhanced and simplified to support stacking. PAM modules have been developed for UNIX, DCE, Kerberos, S/Key, remote user authentication, and dialpass authentication. Other PAM modules are under development, and integration with smart cards is being planned. Some third parties have used the PAM interface to extend the security mechanisms offered by the Solaris environment. Samar, Schemers Page 16 OSF-RFC 86.0 PAM October 1995 The PAM API has been accepted by Common Desktop Environment (CDE) vendors as the API to be used for integrating the graphical interface for login, `dtlogin' with multiple authentication mechanisms. 11. FUTURE WORK Amongst the various components of PAM, the password component needs to be carefully examined to see whether the stacking semantics are particularly applicable, and how PAM should deal with partial failures when changing passwords. The _control_flag_ of the configuration file can be extended to include other semantics. For example, if the error is "name service not available", one may want to retry. It is also possible to offer semantics of "return success if any of the modules return success". In an earlier section, we had mentioned integration of smart cards with PAM. Though we feel that integration should be straight forward from the PAM architecture point of view, there may be some issues with implementation because the interfaces to the smart cards have not yet been standardized. One possible extension to PAM is to allow the passing of module- specific data between applications and PAM modules. For example, the `login' program likes to build its new environment from a select list of variables, yet the DCE module needs the `KRB5CCNAME' variable to be exported to the child process. For now we have modified the `login' program to explicitly export the `KRB5CCNAME' variable. Administrative tools are needed to help system administrators modify `pam.conf', and perform sanity checks on it (i.e., a `pam_check' utility). 12. CONCLUSION The PAM framework and the module interfaces provide pluggability for user authentication, as well as for account, session and password management. The PAM architecture can be used by `login' and by all other system-entry services, and thus ensure that all entry points for the system have been secured. This architecture enables replacement and modification of authentication modules in the field to secure the system against the newly found weaknesses without changing any of the system services. The PAM framework can be used to integrate `login' and `dtlogin' with different authentication mechanisms such as RSA and Kerberos. Multiple authentication systems can be accessed with the same password. The PAM framework also provides easy integration of smart cards into the system. Samar, Schemers Page 17 OSF-RFC 86.0 PAM October 1995 PAM provides complementary functionality to GSS-API, in that it provides mechanisms through which the user gets authenticated to any new system-level authentication service on the machine. GSS-API then uses the credentials for authenticated and secure communications with other application-level service entities on the network. 13. ACKNOWLEDGEMENTS PAM development has spanned several release cycles at SunSoft. Shau-Ping Lo, Chuck Hickey, and Alex Choy did the first design and implementation. Bill Shannon and Don Stephenson helped with the PAM architecture. Rocky Wu prototyped stacking of multiple modules. Paul Fronberg, Charlie Lai, and Roland Schemers made very significant enhancements to the PAM interfaces and took the project to completion within a very short time. Kathy Slattery wrote the PAM documentation. John Perry integrated PAM within the CDE framework. APPENDIX A. PAM API'S This appendix gives an informal description of the various interfaces of PAM. Since the goal here is just for the reader to get a working knowledge about the PAM interfaces, not all flags and options have been fully defined and explained. The API's described here are subject to change. The PAM Service Provider Interface is very similar to the PAM API, except for one extra parameter to pass module-specific options to the underlying modules. A.1. Framework Layer API's int pam_start( char *service_name, char *user, struct pam_conv *pam_conversation, pam_handle_t **pamh ); `pam_start()' is called to initiate an authentication transaction. `pam_start()' takes as arguments the name of the service, the name of the user to be authenticated, the address of the conversation structure. `pamh' is later used as a handle for subsequent calls to the PAM library. The PAM modules do not communicate directly with the user; instead they rely on the application to perform all such interaction. The application needs to provide the conversation functions, `conv()', and associated application data pointers through a `pam_conv' Samar, Schemers Page 18 OSF-RFC 86.0 PAM October 1995 structure when it initiates an authentication transaction. The module uses the `conv()' function to prompt the user for data, display error messages, or text information. int pam_end( pam_handle_t *pamh, int pam_status ); `pam_end()' is called to terminate the PAM transaction as specified by `pamh', and to free any storage area allocated by the PAM modules with `pam_set_item()'. int pam_set_item( pam_handle_t *pamh, int item_type, void *item ); int pam_get_item( pam_handle_t *pamh, int item_type, void **item); `pam_get_item()' and `pam_set_item()' allow the parameters specified in the initial call to `pam_start()' to be read and updated. This is useful when a particular parameter is not available when `pam_start()' is called or must be modified after the initial call to `pam_start()'. `pam_set_item()' is passed a pointer to the object, `item', and its type, `item_type'. `pam_get_item()' is passed the address of the pointer, `item', which is assigned the address of the requested object. The `item_type' is one of the following: Table 5: Possible Values for Item_type Item Name Description --------- ----------- PAM_SERVICE The service name PAM_USER The user name PAM_TTY The tty name PAM_RHOST The remote host name PAM_CONV The pam_conv structure PAM_AUTHTOK The authentication token (password) PAM_OLDAUTHTOK The old authentication token PAM_RUSER The remote user name Samar, Schemers Page 19 OSF-RFC 86.0 PAM October 1995 Note that the values of `PAM_AUTHTOK' and `PAM_OLDAUTHTOK' are only available to PAM modules and not to the applications. They are explicitly cleared out by the framework before returning to the application. char * pam_strerror( int errnum ); `pam_strerror()' maps the error number to a PAM error message string, and returns a pointer to that string. int pam_set_data( pam_handle_t *pamh, char *module_data_name, char *data, (*cleanup)(pam_handle_t *pamh, char *data, int error_status) ); The `pam_set_data()' function stores module specific data within the PAM handle. The `module_data_name' uniquely specifies the name to which some data and cleanup callback function can be attached. The cleanup function is called when `pam_end()' is invoked. int pam_get_data( pam_handle_t *pamh, char *module_data_name, void **datap ); The `pam_get_data()' function obtains module-specific data from the PAM handle stored previously by the `pam_get_data()' function. The `module_data_name' uniquely specifies the name for which data has to be obtained. This function is normally used to retrieve module specific state information. A.2. Authentication API's int pam_authenticate( pam_handle_t *pamh, int flags ); The `pam_authenticate()' function is called to verify the identity of the current user. The user is usually required to enter a password or similar authentication token, depending upon the authentication Samar, Schemers Page 20 OSF-RFC 86.0 PAM October 1995 module configured with the system. The user in question is specified by a prior call to `pam_start()', and is referenced by the authentication handle, `pamh'. int pam_setcred( pam_handle_t *pamh, int flags ); The `pam_setcred()' function is called to set the credentials of the current process associated with the authentication handle, `pamh'. The actions that can be denoted through `flags' include credential initialization, refresh, reinitialization and deletion. A.3. Account Management API int pam_acct_mgmt( pam_handle_t *pamh, int flags ); The function `pam_acct_mgmt()' is called to determine whether the current user's account and password are valid. This typically includes checking for password and account expiration, valid login times, etc. The user in question is specified by a prior call to `pam_start()', and is referenced by the authentication handle, `pamh'. A.4. Session Management API's int pam_open_session( pam_handle_t *pamh, int flags ); `pam_open_session()' is called to inform the session modules that a new session has been initialized. All programs which use PAM should invoke `pam_open_session()' when beginning a new session. int pam_close_session( pam_handle_t *pamh, int flags ); Upon termination of this session, the `pam_close_session()' function should be invoked to inform the underlying modules that the session has terminated. Samar, Schemers Page 21 OSF-RFC 86.0 PAM October 1995 A.5. Password Management API's int pam_chauthtok( pam_handle_t *pamh, int flags ); `pam_chauthtok()' is called to change the authentication token associated with the user referenced by the authentication handle `pamh'. After the call, the authentication token of the user will be changed in accordance with the authentication module configured on the system. APPENDIX B. SAMPLE PAM APPLICATION This appendix shows a sample `login' application which uses the PAM API's. It is not meant to be a fully functional login program, as some functionality has been left out in order to emphasize the use of PAM API's. #include static int login_conv(int num_msg, struct pam_message **msg, struct pam_response **response, void *appdata_ptr); static struct pam_conv pam_conv = {login_conv, NULL}; static pam_handle_t *pamh; /* Authentication handle */ void main(int argc, char *argv[], char **renvp) { /* * Call pam_start to initiate a PAM authentication operation */ if ((pam_start("login", user_name, &pam_conv, &pamh)) != PAM_SUCCESS) login_exit(1); pam_set_item(pamh, PAM_TTY, ttyn); pam_set_item(pamh, PAM_RHOST, remote_host); while (!authenticated && retry < MAX_RETRIES) { status = pam_authenticate(pamh, 0); authenticated = (status == PAM_SUCCESS); } Samar, Schemers Page 22 OSF-RFC 86.0 PAM October 1995 if (status != PAM_SUCCESS) { fprintf(stderr,"error: %s\n", pam_strerror(status)); login_exit(1); } /* now check if the authenticated user is allowed to login. */ if ((status = pam_acct_mgmt(pamh, 0)) != PAM_SUCCESS) { if (status == PAM_AUTHTOK_EXPIRED) { status = pam_chauthtok(pamh, 0); if (status != PAM_SUCCESS) login_exit(1); } else { login_exit(1); } } /* * call pam_open_session to open the authenticated session * pam_close_session gets called by the process that * cleans up the utmp entry (i.e., init) */ if (status = pam_open_session(pamh, 0) != PAM_SUCCESS) { login_exit(status); } /* set up the process credentials */ setgid(pwd->pw_gid); /* * Initialize the supplementary group access list. * This should be done before pam_setcred because * the PAM modules might add groups during the pam_setcred call */ initgroups(user_name, pwd->pw_gid); status = pam_setcred(pamh, PAM_ESTABLISH_CRED); if (status != PAM_SUCCESS) { login_exit(status); } /* set the real (and effective) UID */ setuid(pwd->pw_uid); pam_end(pamh, PAM_SUCCESS); /* Done using PAM */ /* * Add DCE/Kerberos cred name, if any. * XXX - The module specific stuff should be removed from login * program eventually. This is better placed in DCE module and * will be once PAM has routines for "exporting" environment Samar, Schemers Page 23 OSF-RFC 86.0 PAM October 1995 * variables. */ krb5p = getenv("KRB5CCNAME"); if (krb5p != NULL) { ENVSTRNCAT(krb5ccname, krb5p); envinit[basicenv++] = krb5ccname; } environ = envinit; /* Switch to the new environment. */ exec_the_shell(); /* All done */ } /* * login_exit - Call exit() and terminate. * This function is here for PAM so cleanup can * be done before the process exits. */ static void login_exit(int exit_code) { if (pamh) pam_end(pamh, PAM_ABORT); exit(exit_code); /*NOTREACHED*/ } /* * login_conv(): * This is the conv (conversation) function called from * a PAM authentication module to print error messages * or garner information from the user. */ static int login_conv(int num_msg, struct pam_message **msg, struct pam_response **response, void *appdata_ptr) { while (num_msg--) { switch (m->msg_style) { case PAM_PROMPT_ECHO_OFF: r->resp = strdup(getpass(m->msg)); break; case PAM_PROMPT_ECHO_ON: (void) fputs(m->msg, stdout); r->resp = malloc(PAM_MAX_RESP_SIZE); fgets(r->resp, PAM_MAX_RESP_SIZE, stdin); /* add code here to remove \n from fputs */ Samar, Schemers Page 24 OSF-RFC 86.0 PAM October 1995 break; case PAM_ERROR_MSG: (void) fputs(m->msg, stderr); break; case PAM_TEXT_INFO: (void) fputs(m->msg, stdout); break; default: /* add code here to log error message, etc */ break; } } return (PAM_SUCCESS); } APPENDIX C. DCE MODULE This appendix describes a sample implementation of a DCE PAM module. In order to simplify the description, we do not address the issues raised by password-mapping or stacking. The intent is to show which DCE calls are being made by the DCE module. The `pam_sm_*()' functions implement the PAM SPI functions which are called from the PAM API functions. C.1. DCE Authentication Management The algorithm for authenticating with DCE (not including error checking, prompting for passwords, etc.) is as follows: pam_sm_authenticate() { sec_login_setup_identity(...); pam_set_data(...); sec_login_valid_and_cert_ident(...); } pam_sm_setcred() { pam_get_data(...); sec_login_set_context(...); } The `pam_sm_authenticate()' function for DCE uses the `pam_set_data()' and `pam_get_data()' functions to keep state (like the `sec_login_handle_t' context) between calls. The following cleanup function is also registered and gets called when `pam_end()' Samar, Schemers Page 25 OSF-RFC 86.0 PAM October 1995 is called: dce_cleanup() { if (/* PAM_SUCCESS and sec_login_valid_and_cert_ident success */) { sec_login_release_context(...); } else { sec_login_purge_context(...); } } If everything was successful we release the login context, but leave the credentials file intact. If the status passed to `pam_end()' was not `PAM_SUCCESS' (i.e., a required module failed) we purge the login context which also removes the credentials file. C.2. DCE Account Management The algorithm for DCE account management is as follows: pam_sm_acct_mgmt() { pam_get_data(...); sec_login_inquire_net_info(...); /* check for expired password and account */ sec_login_free_net_info(...); } The `sec_login_inquire_net_info()' function is called to obtain information about when the user's account and/or password are going to expire. A warning message is displayed (using the conversation function) if the user's account or password is going to expire in the near future, or has expired. These warning messages can be disabled using the `nowarn' option in the `pam.conf' file. C.3. DCE Session Management The DCE session management functions are currently empty. They could be modified to optionally remove the DCE credentials file upon logout, etc. C.4. DCE Password Management The algorithm for DCE password management is as follows: Samar, Schemers Page 26 OSF-RFC 86.0 PAM October 1995 pam_sm_chauthtok { sec_rgy_site_open(...); sec_rgy_acct_lookup(...); sec_rgy_acct_passwd(...); sec_rgy_site_close(...); } The `sec_rgy_acct_passwd()' function is called to change the user's password in the DCE registry. REFERENCES [Adamson 95] W. A. Adamson, J. Rees, and P. Honeyman, "Joining Security Realms: A Single Login for Netware and Kerberos", CITI Technical Report 95-1, Center for Information Technology Integration, University of Michigan, Ann Arbor, MI, February 1995. [Diffie 76] W. Diffie and M. E. Hellman, "New Directions in Cryptography", IEEE Transactions on Information Theory, November 1976. [Linn 93] J. Linn, "Generic Security Service Application Programming Interface", Internet RFC 1508, 1509, 1993. [Rivest 78] R. L. Rivest, A. Shamir, and L. Adleman., "A Method for Obtaining Digital Signatures and Pubic-key Cryptosystems", Communications of the ACM, 21(2), 1978. [SIA 95] "Digital UNIX Security", Digital Equipment Corporation, Order Number AA-Q0R2C-TE, July 1995. [Skey 94] N. M. Haller, "The S/Key One-Time Password System", ISOC Symposium on Network and Distributed Security, 1994. [Steiner 88] J.G. Steiner, B. C. Neuman, and J. I. Schiller, "Kerberos, An Authentication Service for Open Network Systems", in Proceedings of the Winter USENIX Conference, Dallas, Jan 1988. [Taylor 88] B. Taylor and D. Goldberg, "Secure Networking in the Sun Environment", Sun Microsystems Technical Paper, 1988. [XFN 94] "Federated Naming: the XFN Specifications", X/Open Preliminary Specification, X/Open Document #P403, ISBN:1-85912-045-8, X/Open Co. Ltd., July 1994. Samar, Schemers Page 27 OSF-RFC 86.0 PAM October 1995 AUTHOR'S ADDRESS Vipin Samar Internet email: vipin@eng.sun.com SunSoft, Inc. Telephone: +1-415-336-1002 2550 Garcia Avenue Mountain View, CA 94043 USA Roland J. Schemers III Internet email: schemers@eng.sun.com SunSoft, Inc. Telephone: +1-415-336-1035 2550 Garcia Avenue Mountain View, CA 94043 USA Samar, Schemers Page 28 Linux-PAM-1.1.8/doc/Makefile.in0000644000000000000000000005147012216527535012753 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(dist_html_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(htmldir)" DATA = $(dist_html_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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@ SUBDIRS = man specs sag adg mwg CLEANFILES = *~ dist_html_DATA = index.html all: all-recursive .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 ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_htmlDATA: $(dist_html_DATA) @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" @list='$(dist_html_DATA)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done uninstall-dist_htmlDATA: @$(NORMAL_UNINSTALL) @list='$(dist_html_DATA)'; test -n "$(htmldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(htmldir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(htmldir)" && rm -f $$files # 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): @fail= 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; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= 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; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(htmldir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_htmlDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -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: uninstall-dist_htmlDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean 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-dist_htmlDATA 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 \ uninstall-dist_htmlDATA ####################################################### releasedocs: all $(mkinstalldirs) $(top_builddir)/Linux-PAM-$(VERSION)/doc/specs cp -av specs/draft-morgan-pam-current.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/specs/ cp -av $(srcdir)/specs/rfc86.0.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/specs/ make -C sag releasedocs make -C adg releasedocs make -C mwg releasedocs # 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: Linux-PAM-1.1.8/doc/mwg/0000755000000000000000000000000012216542314011541 500000000000000Linux-PAM-1.1.8/doc/mwg/pam_strerror.xml0000644000000000000000000000163112160065211014715 00000000000000
Strings describing PAM error codes
Linux-PAM-1.1.8/doc/mwg/pam_getenvlist.xml0000644000000000000000000000164412160065211015223 00000000000000
Getting the PAM environment
Linux-PAM-1.1.8/doc/mwg/pam_sm_chauthtok.xml0000644000000000000000000000171112160065211015523 00000000000000
Service function to alter authentication token
Linux-PAM-1.1.8/doc/mwg/pam_putenv.xml0000644000000000000000000000161312160065211014354 00000000000000
Set or change PAM environment variable
Linux-PAM-1.1.8/doc/mwg/pam_get_user.xml0000644000000000000000000000160412160065211014650 00000000000000
Get user name
Linux-PAM-1.1.8/doc/mwg/pam_sm_authenticate.xml0000644000000000000000000000173612160065211016216 00000000000000
Service function for user authentication
Linux-PAM-1.1.8/doc/mwg/pam_sm_open_session.xml0000644000000000000000000000174212160065211016241 00000000000000
Service function to start session management
Linux-PAM-1.1.8/doc/mwg/pam_getenv.xml0000644000000000000000000000160312160065211014322 00000000000000
Get a PAM environment variable
Linux-PAM-1.1.8/doc/mwg/pam_get_item.xml0000644000000000000000000000161012160065211014625 00000000000000
Getting PAM items
Linux-PAM-1.1.8/doc/mwg/pam_fail_delay.xml0000644000000000000000000000164312160065211015127 00000000000000
Request a delay on failure
Linux-PAM-1.1.8/doc/mwg/Makefile.am0000644000000000000000000000721212160065211013511 00000000000000# # Copyright (c) 2006 Thorsten Kukuk # CLEANFILES = Linux-PAM_MWG.fo *~ EXTRA_DIST = $(XMLS) XMLS = Linux-PAM_MWG.xml $(shell ls $(srcdir)/pam_*.xml) DEP_XMLS = $(shell ls $(top_srcdir)/doc/man/pam_*.xml) if ENABLE_REGENERATE_MAN MAINTAINERCLEANFILES = Linux-PAM_MWG.txt Linux-PAM_MWG.pdf html/*.html all: Linux-PAM_MWG.txt html/Linux-PAM_MWG.html Linux-PAM_MWG.pdf Linux-PAM_MWG.pdf: $(XMLS) $(DEP_XMLS) if ENABLE_GENERATE_PDF $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< $(XSLTPROC) --stringparam generate.toc "book toc" \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 3 --xinclude --nonet \ http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_MWG.fo $(FO2PDF) Linux-PAM_MWG.fo $@ else echo "No fo2pdf processor installed, skip PDF generation" endif Linux-PAM_MWG.txt: $(XMLS) $(DEP_XMLS) $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< $(XSLTPROC) --stringparam generate.toc "book toc" \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 3 --xinclude --nonet \ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@ html/Linux-PAM_MWG.html: $(XMLS) $(DEP_XMLS) @test -d html || mkdir -p html $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< $(XSLTPROC) --stringparam base.dir html/ \ --stringparam root.filename Linux-PAM_MWG \ --stringparam use.id.as.filename 1 \ --stringparam chunk.first.sections 1 \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 \ --stringparam toc.max.depth 3 --xinclude --nonet \ --stringparam chunker.output.encoding UTF-8 \ http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $< distclean-local: -rm -rf html Linux-PAM_MWG.txt Linux-PAM_MWG.pdf endif install-data-local: $(mkinstalldirs) $(DESTDIR)$(docdir) $(mkinstalldirs) $(DESTDIR)$(pdfdir) $(mkinstalldirs) $(DESTDIR)$(htmldir) test -f html/Linux-PAM_MWG.html || exit 0; \ $(install_sh_DATA) html/Linux-PAM_MWG.html html/mwg-*.html \ $(DESTDIR)$(htmldir)/ || \ $(install_sh_DATA) $(srcdir)/html/Linux-PAM_MWG.html \ $(srcdir)/html/sag-*.html \ $(DESTDIR)$(htmldir)/ test -f Linux-PAM_MWG.txt || exit 0; \ $(install_sh_DATA) Linux-PAM_MWG.txt $(DESTDIR)$(docdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_MWG.txt \ $(DESTDIR)$(docdir)/ test -f Linux-PAM_MWG.pdf || exit 0; \ $(install_sh_DATA) Linux-PAM_MWG.pdf $(DESTDIR)$(pdfdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_MWG.pdf \ $(DESTDIR)$(pdfdir)/ uninstall-local: -rm $(DESTDIR)$(htmldir)/Linux-PAM_MWG.html -rm $(DESTDIR)$(htmldir)/mwg-*.html -rm $(DESTDIR)$(docdir)/Linux-PAM_MWG.txt -rm $(DESTDIR)$(pdfdir)/Linux-PAM_MWG.pdf releasedocs: all $(mkinstalldirs) $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/html test -f html/Linux-PAM_MWG.html || exit 0; \ cp -ap html/Linux-PAM_MWG.html html/mwg-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/html/ || \ cp -ap $(srcdir)/html/Linux-PAM_MWG.html \ $(srcdir)/html/mwg-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/html/ test -f Linux-PAM_MWG.txt || exit 0; \ cp -p Linux-PAM_MWG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/ || \ cp -p $(srcdir)/Linux-PAM_MWG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/ test -f Linux-PAM_MWG.pdf || exit 0; \ cp -p Linux-PAM_MWG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/ || \ cp -p $(srcdir)/Linux-PAM_MWG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/ Linux-PAM-1.1.8/doc/mwg/pam_conv.xml0000644000000000000000000000227512160065211014005 00000000000000
The conversation function struct pam_message { int msg_style; const char *msg; }; struct pam_response { char *resp; int resp_retcode; }; struct pam_conv { int (*conv)(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr); void *appdata_ptr; };
Linux-PAM-1.1.8/doc/mwg/pam_set_item.xml0000644000000000000000000000161012160065211014641 00000000000000
Setting PAM items
Linux-PAM-1.1.8/doc/mwg/pam_sm_close_session.xml0000644000000000000000000000176012160065211016405 00000000000000
Service function to terminate session management
Linux-PAM-1.1.8/doc/mwg/pam_sm_setcred.xml0000644000000000000000000000165612160065211015172 00000000000000
Service function to alter credentials
Linux-PAM-1.1.8/doc/mwg/pam_set_data.xml0000644000000000000000000000161712160065211014623 00000000000000
Set module internal data
Linux-PAM-1.1.8/doc/mwg/Makefile.in0000644000000000000000000004015512216527535013543 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2006 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/mwg DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = Linux-PAM_MWG.fo *~ EXTRA_DIST = $(XMLS) XMLS = Linux-PAM_MWG.xml $(shell ls $(srcdir)/pam_*.xml) DEP_XMLS = $(shell ls $(top_srcdir)/doc/man/pam_*.xml) @ENABLE_REGENERATE_MAN_TRUE@MAINTAINERCLEANFILES = Linux-PAM_MWG.txt Linux-PAM_MWG.pdf html/*.html 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 ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/mwg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/mwg/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) @ENABLE_REGENERATE_MAN_FALSE@distclean-local: clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distclean-local \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ 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 uninstall-local @ENABLE_REGENERATE_MAN_TRUE@all: Linux-PAM_MWG.txt html/Linux-PAM_MWG.html Linux-PAM_MWG.pdf @ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_MWG.pdf: $(XMLS) $(DEP_XMLS) @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \ @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl $< > Linux-PAM_MWG.fo @ENABLE_GENERATE_PDF_TRUE@@ENABLE_REGENERATE_MAN_TRUE@ $(FO2PDF) Linux-PAM_MWG.fo $@ @ENABLE_GENERATE_PDF_FALSE@@ENABLE_REGENERATE_MAN_TRUE@ echo "No fo2pdf processor installed, skip PDF generation" @ENABLE_REGENERATE_MAN_TRUE@Linux-PAM_MWG.txt: $(XMLS) $(DEP_XMLS) @ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< @ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam generate.toc "book toc" \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \ @ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< | $(BROWSER) > $@ @ENABLE_REGENERATE_MAN_TRUE@html/Linux-PAM_MWG.html: $(XMLS) $(DEP_XMLS) @ENABLE_REGENERATE_MAN_TRUE@ @test -d html || mkdir -p html @ENABLE_REGENERATE_MAN_TRUE@ $(XMLLINT) --nonet --xinclude --postvalid --noent --noout $< @ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam base.dir html/ \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam root.filename Linux-PAM_MWG \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam use.id.as.filename 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam chunk.first.sections 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.autolabel 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam section.label.includes.component.label 1 \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam toc.max.depth 3 --xinclude --nonet \ @ENABLE_REGENERATE_MAN_TRUE@ --stringparam chunker.output.encoding UTF-8 \ @ENABLE_REGENERATE_MAN_TRUE@ http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $< @ENABLE_REGENERATE_MAN_TRUE@distclean-local: @ENABLE_REGENERATE_MAN_TRUE@ -rm -rf html Linux-PAM_MWG.txt Linux-PAM_MWG.pdf install-data-local: $(mkinstalldirs) $(DESTDIR)$(docdir) $(mkinstalldirs) $(DESTDIR)$(pdfdir) $(mkinstalldirs) $(DESTDIR)$(htmldir) test -f html/Linux-PAM_MWG.html || exit 0; \ $(install_sh_DATA) html/Linux-PAM_MWG.html html/mwg-*.html \ $(DESTDIR)$(htmldir)/ || \ $(install_sh_DATA) $(srcdir)/html/Linux-PAM_MWG.html \ $(srcdir)/html/sag-*.html \ $(DESTDIR)$(htmldir)/ test -f Linux-PAM_MWG.txt || exit 0; \ $(install_sh_DATA) Linux-PAM_MWG.txt $(DESTDIR)$(docdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_MWG.txt \ $(DESTDIR)$(docdir)/ test -f Linux-PAM_MWG.pdf || exit 0; \ $(install_sh_DATA) Linux-PAM_MWG.pdf $(DESTDIR)$(pdfdir)/ || \ $(install_sh_DATA) $(srcdir)/Linux-PAM_MWG.pdf \ $(DESTDIR)$(pdfdir)/ uninstall-local: -rm $(DESTDIR)$(htmldir)/Linux-PAM_MWG.html -rm $(DESTDIR)$(htmldir)/mwg-*.html -rm $(DESTDIR)$(docdir)/Linux-PAM_MWG.txt -rm $(DESTDIR)$(pdfdir)/Linux-PAM_MWG.pdf releasedocs: all $(mkinstalldirs) $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/html test -f html/Linux-PAM_MWG.html || exit 0; \ cp -ap html/Linux-PAM_MWG.html html/mwg-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/html/ || \ cp -ap $(srcdir)/html/Linux-PAM_MWG.html \ $(srcdir)/html/mwg-*.html \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/html/ test -f Linux-PAM_MWG.txt || exit 0; \ cp -p Linux-PAM_MWG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/ || \ cp -p $(srcdir)/Linux-PAM_MWG.txt \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/ test -f Linux-PAM_MWG.pdf || exit 0; \ cp -p Linux-PAM_MWG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/ || \ cp -p $(srcdir)/Linux-PAM_MWG.pdf \ $(top_builddir)/Linux-PAM-$(VERSION)/doc/mwg/ # 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: Linux-PAM-1.1.8/doc/mwg/pam_get_data.xml0000644000000000000000000000161712160065211014607 00000000000000
Get module internal data
Linux-PAM-1.1.8/doc/mwg/Linux-PAM_MWG.xml0000644000000000000000000007060712160065211014433 00000000000000 The Linux-PAM Module Writers' Guide Andrew G. Morgan morgan@kernel.org Thorsten Kukuk kukuk@thkukuk.de Version 1.1.2, 31. August 2010 This manual documents what a programmer needs to know in order to write a module that conforms to the Linux-PAM standard.It also discusses some security issues from the point of view of the module programmer. Introduction
Description Linux-PAM (Pluggable Authentication Modules for Linux) is a library that enables the local system administrator to choose how individual applications authenticate users. For an overview of the Linux-PAM library see the Linux-PAM System Administrators' Guide. A Linux-PAM module is a single executable binary file that can be loaded by the Linux-PAM interface library. This PAM library is configured locally with a system file, /etc/pam.conf, to authenticate a user request via the locally available authentication modules. The modules themselves will usually be located in the directory /lib/security (or /lib64/security, depending on the architecture) and take the form of dynamically loadable object files (see dlopen3 . Alternatively, the modules can be statically linked into the Linux-PAM library; this is mostly to allow Linux-PAM to be used on platforms without dynamic linking available, but this is a deprecated functionality. It is the Linux-PAM interface that is called by an application and it is the responsibility of the library to locate, load and call the appropriate functions in a Linux-PAM-module. Except for the immediate purpose of interacting with the user (entering a password etc..) the module should never call the application directly. This exception requires a "conversation mechanism" which is documented below.
Synopsis #include <security/pam_modules.h> gcc -fPIC -c pam_module.c gcc -shared -o pam_module.so pam_module.o -lpam
What can be expected by the module Here we list the interface that the conventions that all Linux-PAM modules must adhere to.
Getting and setting <emphasis>PAM_ITEM</emphasis>s and <emphasis>data</emphasis> First, we cover what the module should expect from the Linux-PAM library and a Linux-PAM aware application. Essentially this is the libpam.* library.
Other functions provided by <filename>libpam</filename>
What is expected of a module The module must supply a sub-set of the six functions listed below. Together they define the function of a Linux-PAM module. Module developers are strongly urged to read the comments on security that follow this list.
Overview The six module functions are grouped into four independent management groups. These groups are as follows: authentication, account, session and password. To be properly defined, a module must define all functions within at least one of these groups. A single module may contain the necessary functions for all four groups.
Functional independence The independence of the four groups of service a module can offer means that the module should allow for the possibility that any one of these four services may legitimately be called in any order. Thus, the module writer should consider the appropriateness of performing a service without the prior success of some other part of the module. As an informative example, consider the possibility that an application applies to change a user's authentication token, without having first requested that Linux-PAM authenticate the user. In some cases this may be deemed appropriate: when root wants to change the authentication token of some lesser user. In other cases it may not be appropriate: when joe maliciously wants to reset alice's password; or when anyone other than the user themself wishes to reset their KERBEROS authentication token. A policy for this action should be defined by any reasonable authentication scheme, the module writer should consider this when implementing a given module.
Minimizing administration problems To avoid system administration problems and the poor construction of a /etc/pam.conf file, the module developer may define all six of the following functions. For those functions that would not be called, the module should return PAM_SERVICE_ERR and write an appropriate message to the system log. When this action is deemed inappropriate, the function would simply return PAM_IGNORE.
Arguments supplied to the module The flags argument of each of the following functions can be logically OR'd with PAM_SILENT, which is used to inform the module to not pass any text (errors or warnings) application. The argc and argv arguments are taken from the line appropriate to this module---that is, with the service_name matching that of the application---in the configuration file (see the Linux-PAM System Administrators' Guide). Together these two parameters provide the number of arguments and an array of pointers to the individual argument tokens. This will be familiar to C programmers as the ubiquitous method of passing command arguments to the function main(). Note, however, that the first argument (argv[0]) is a true argument and not the name of the module.
Authentication management To be correctly initialized, PAM_SM_AUTH must be #define'd prior to including <security/pam_modules.h>. This will ensure that the prototypes for static modules are properly declared.
Account management To be correctly initialized, PAM_SM_ACCOUNT must be #define'd prior to including <security/pam_modules.h>. This will ensure that the prototypes for static modules are properly declared.
Session management To be correctly initialized, PAM_SM_SESSION must be #define'd prior to including <security/pam_modules.h>. This will ensure that the prototypes for static modules are properly declared.
Authentication token management To be correctly initialized, PAM_SM_PASSWORD must be #define'd prior to including <security/pam_modules.h>. This will ensure that the prototypes for static modules are properly declared.
Generic optional arguments Here we list the generic arguments that all modules can expect to be passed. They are not mandatory, and their absence should be accepted without comment by the module. debug Use the pam_syslog3 call to log debugging information to the system log files. use_first_pass The module should not prompt the user for a password. Instead, it should obtain the previously typed password (by a call to pam_get_item() for the PAM_AUTHTOK item), and use that. If that doesn't work, then the user will not be authenticated. (This option is intended for auth and passwd modules only). Programming notes Here we collect some pointers for the module writer to bear in mind when writing/developing a Linux-PAM compatible module.
Security issues for module creation
Sufficient resources Care should be taken to ensure that the proper execution of a module is not compromised by a lack of system resources. If a module is unable to open sufficient files to perform its task, it should fail gracefully, or request additional resources. Specifically, the quantities manipulated by the setrlimit2 family of commands should be taken into consideration.
Who´s who? Generally, the module may wish to establish the identity of the user requesting a service. This may not be the same as the username returned by pam_get_user(). Indeed, that is only going to be the name of the user under whose identity the service will be given. This is not necessarily the user that requests the service. In other words, user X runs a program that is setuid-Y, it grants the user to have the permissions of Z. A specific example of this sort of service request is the su program: user joe executes su to become the user jane. In this situation X=joe, Y=root and Z=jane. Clearly, it is important that the module does not confuse these different users and grant an inappropriate level of privilege. The following is the convention to be adhered to when juggling user-identities. X, the identity of the user invoking the service request. This is the user identifier; returned by the function getuid2 . Y, the privileged identity of the application used to grant the requested service. This is the effective user identifier; returned by the function geteuid2 . Z, the user under whose identity the service will be granted. This is the username returned by pam_get_user() and also stored in the Linux-PAM item, PAM_USER. Linux-PAM has a place for an additional user identity that a module may care to make use of. This is the PAM_RUSER item. Generally, network sensitive modules/applications may wish to set/read this item to establish the identity of the user requesting a service from a remote location. Note, if a module wishes to modify the identity of either the uid or euid of the running process, it should take care to restore the original values prior to returning control to the Linux-PAM library.
Using the conversation function Prior to calling the conversation function, the module should reset the contents of the pointer that will return the applications response. This is a good idea since the application may fail to fill the pointer and the module should be in a position to notice! The module should be prepared for a failure from the conversation. The generic error would be PAM_CONV_ERR, but anything other than PAM_SUCCESS should be treated as indicating failure.
Authentication tokens To ensure that the authentication tokens are not left lying around the items, PAM_AUTHTOK and PAM_OLDAUTHTOK, are not available to the application: they are defined in <security/pam_modules.h>. This is ostensibly for security reasons, but a maliciously programmed application will always have access to all memory of the process, so it is only superficially enforced. As a general rule the module should overwrite authentication tokens as soon as they are no longer needed. Especially before free()'ing them. The Linux-PAM library is required to do this when either of these authentication token items are (re)set. Not to dwell too little on this concern; should the module store the authentication tokens either as (automatic) function variables or using pam_[gs]et_data() the associated memory should be over-written explicitly before it is released. In the case of the latter storage mechanism, the associated cleanup() function should explicitly overwrite the *data before free()'ing it: for example, /* * An example cleanup() function for releasing memory that was used to * store a password. */ int cleanup(pam_handle_t *pamh, void *data, int error_status) { char *xx; if ((xx = data)) { while (*xx) *xx++ = '\0'; free(data); } return PAM_SUCCESS; }
Use of <citerefentry> <refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum> </citerefentry> Only rarely should error information be directed to the user. Usually, this is to be limited to sorry you cannot login now type messages. Information concerning errors in the configuration file, /etc/pam.conf, or due to some system failure encountered by the module, should be written to syslog3 with facility-type LOG_AUTHPRIV. With a few exceptions, the level of logging is, at the discretion of the module developer. Here is the recommended usage of different logging levels: As a general rule, errors encountered by a module should be logged at the LOG_ERR level. However, information regarding an unrecognized argument, passed to a module from an entry in the /etc/pam.conf file, is required to be logged at the LOG_ERR level. Debugging information, as activated by the debug argument to the module in /etc/pam.conf, should be logged at the LOG_DEBUG level. If a module discovers that its personal configuration file or some system file it uses for information is corrupted or somehow unusable, it should indicate this by logging messages at level, LOG_ALERT. Shortages of system resources, such as a failure to manipulate a file or malloc() failures should be logged at level LOG_CRIT. Authentication failures, associated with an incorrectly typed password should be logged at level, LOG_NOTICE.
Modules that require system libraries Writing a module is much like writing an application. You have to provide the "conventional hooks" for it to work correctly, like pam_sm_authenticate() etc., which would correspond to the main() function in a normal function. Typically, the author may want to link against some standard system libraries. As when one compiles a normal program, this can be done for modules too: you simply append the -lXXX arguments for the desired libraries when you create the shared module object. To make sure a module is linked to the libwhatever.so library when it is dlopen()ed, try: % gcc -shared -o pam_module.so pam_module.o -lwhatever
An example module At some point, we may include a fully commented example of a module in this document. For now, please look at the modules directory of the Linux-PAM sources. See also The Linux-PAM System Administrators' Guide. The Linux-PAM Application Developers' Guide. The V. Samar and R. Schemers (SunSoft), ``UNIFIED LOGIN WITH PLUGGABLE AUTHENTICATION MODULES'', Open Software Foundation Request For Comments 86.0, October 1995. Author/acknowledgments This document was written by Andrew G. Morgan (morgan@kernel.org) with many contributions from Chris Adams, Peter Allgeyer, Tim Baverstock, Tim Berger, Craig S. Bell, Derrick J. Brashear, Ben Buxton, Seth Chaiklin, Oliver Crow, Chris Dent, Marc Ewing, Cristian Gafton, Emmanuel Galanos, Brad M. Garcia, Eric Hester, Roger Hu, Eric Jacksch, Michael K. Johnson, David Kinchlea, Olaf Kirch, Marcin Korzonek, Thorsten Kukuk, Stephen Langasek, Nicolai Langfeldt, Elliot Lee, Luke Kenneth Casson Leighton, Al Longyear, Ingo Luetkebohle, Marek Michalkiewicz, Robert Milkowski, Aleph One, Martin Pool, Sean Reifschneider, Jan Rekorajski, Erik Troan, Theodore Ts'o, Jeff Uphoff, Myles Uyema, Savochkin Andrey Vladimirovich, Ronald Wahl, David Wood, John Wilmes, Joseph S. D. Yao and Alex O. Yuriev. Thanks are also due to Sun Microsystems, especially to Vipin Samar and Charlie Lai for their advice. At an early stage in the development of Linux-PAM, Sun graciously made the documentation for their implementation of PAM available. This act greatly accelerated the development of Linux-PAM. Copyright information for this document Copyright (c) 2006 Thorsten Kukuk <kukuk@thkukuk.de> Copyright (c) 1996-2002 Andrew G. Morgan <morgan@kernel.org> 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 General Public License (GPL), in which case the provisions of the GNU GPL are required instead of the above restrictions. (This clause is necessary due to a potential bad interaction between the GNU 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
Linux-PAM-1.1.8/doc/mwg/pam_sm_acct_mgmt.xml0000644000000000000000000000170212160065211015467 00000000000000
Service function for account management
Linux-PAM-1.1.8/ABOUT-NLS0000644000000000000000000023523512160066615011366 000000000000001 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. Linux-PAM-1.1.8/Copyright0000644000000000000000000000377512160065211012023 00000000000000Unless otherwise *explicitly* stated the following text describes the licensed conditions under which the contents of this Linux-PAM release may be distributed: ------------------------------------------------------------------------- Redistribution and use in source and binary forms of Linux-PAM, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain any existing copyright notice, and this entire permission notice in its entirety, including the disclaimer of warranties. 2. Redistributions in binary form must reproduce all prior and current copyright notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of any author may not be used to endorse or promote products derived from this software without their specific prior written permission. ALTERNATIVELY, this product may be distributed under the terms of the GNU General Public License, in which case the provisions of the GNU GPL are required INSTEAD OF the above restrictions. (This clause is necessary due to a potential conflict between the GNU 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(S) 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. ------------------------------------------------------------------------- Linux-PAM-1.1.8/Makefile.am0000644000000000000000000000230012160065211012143 00000000000000# # Copyright (c) 2005, 2006, 2007 Thorsten Kukuk # AUTOMAKE_OPTIONS = 1.9 gnu dist-bzip2 check-news SUBDIRS = libpam tests libpamc libpam_misc modules po conf doc examples xtests CLEANFILES = *~ EXTRA_DIST = pgp.keys.asc CHANGELOG ChangeLog-CVS Copyright Make.xml.rules ACLOCAL_AMFLAGS = -I m4 release: dist releasedocs release-docs: releasedocs releasedocs: rm -rf Linux-PAM-$(VERSION) mkdir -p Linux-PAM-$(VERSION)/doc make -C doc releasedocs tar zfc Linux-PAM-$(VERSION)-docs.tar.gz \ Linux-PAM-$(VERSION)/doc tar jfc Linux-PAM-$(VERSION)-docs.tar.bz2 \ Linux-PAM-$(VERSION)/doc rm -rf Linux-PAM-$(VERSION) xtests: make -C xtests xtests .PHONY: xtests gen_changelog_start_date = 2011-10-26 gen-ChangeLog: if test -d .git; then \ ( $(top_srcdir)/gitlog-to-changelog --append-dot \ --since=$(gen_changelog_start_date) && \ echo && echo && \ echo 'See ChangeLog-CVS for earlier changes.' \ ) > $(distdir)/ChangeLog.new && \ rm -f $(distdir)/ChangeLog && \ mv $(distdir)/ChangeLog.new $(distdir)/ChangeLog; \ fi dist-hook: gen-ChangeLog .PHONY: gen-ChangeLog export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner --mode=go-w,go+rX Linux-PAM-1.1.8/README0000644000000000000000000000314412160065211010776 00000000000000 Hello! Thanks for downloading Linux-PAM. NOTES: How to use it is as follows: ./configure --help | less ./configure make To make sure everything was compiled correct, run: make check If a test fails, you should not continue to install this build. These tests require a suitable file /etc/pam.d/other; if necessary, create such a file containing, e.g., these five lines (not indented) #%PAM-1.0 auth required pam_deny.so account required pam_deny.so password required pam_deny.so session required pam_deny.so Note, if you are worried - don't even think about doing the next line (most Linux distributions already support PAM out of the box, so if something goes wrong with installing the code from this version your box may stop working..) make install That said, please report problems to the bug reporting database on sourceforge.net. You can run additional checks after installing by executing make xtests as root. WARNING: Running "make xtests" can overwrite configuration data or make the system insecure/unfunctional for a short time! Backup all important data before! If you do not wish to make the modules dynamically loadable, but build a static libpam including all PAM modules, you have to call: ./configure --enable-static-modules --disable-pie To run the build checks with static modules, you need to run the following command: make -C test check && make check To regenerate manual pages from the XML source files you need the docbook-xsl stylesheets in version 1.69.1 or newer, older versions had a bug which generates a broken layout. Linux-PAM-1.1.8/COPYING0000644000000000000000000000377512160065211011163 00000000000000Unless otherwise *explicitly* stated the following text describes the licensed conditions under which the contents of this Linux-PAM release may be distributed: ------------------------------------------------------------------------- Redistribution and use in source and binary forms of Linux-PAM, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain any existing copyright notice, and this entire permission notice in its entirety, including the disclaimer of warranties. 2. Redistributions in binary form must reproduce all prior and current copyright notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of any author may not be used to endorse or promote products derived from this software without their specific prior written permission. ALTERNATIVELY, this product may be distributed under the terms of the GNU General Public License, in which case the provisions of the GNU GPL are required INSTEAD OF the above restrictions. (This clause is necessary due to a potential conflict between the GNU 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(S) 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. ------------------------------------------------------------------------- Linux-PAM-1.1.8/build-aux/0000755000000000000000000000000012216542310012070 500000000000000Linux-PAM-1.1.8/build-aux/compile0000755000000000000000000000727112216527534013410 00000000000000#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2009-10-06.20; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 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, see . # 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 's|^.*[\\/]||; s|^[a-zA-Z]:||; 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 test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: Linux-PAM-1.1.8/build-aux/ltmain.sh0000755000000000000000000073310412216527531013653 00000000000000# 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 Linux-PAM-1.1.8/build-aux/install-sh0000755000000000000000000003253712216527534014041 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # 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. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$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 $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # 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. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: Linux-PAM-1.1.8/build-aux/depcomp0000755000000000000000000004426712216527540013412 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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, see . # 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 cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp 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. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" 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. 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 tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # 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,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$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" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. 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 tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; 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 mechanism 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 $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 "X$1" != 'X--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 "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi 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. -arch) eat=yes ;; -*|$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 "X$1" != 'X--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. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # 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 ;; 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: Linux-PAM-1.1.8/build-aux/config.rpath0000755000000000000000000003744412160066615014343 00000000000000#! /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=/' <. # # 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, see . # 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 files given. Try \`$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to . EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input="$1" shift case "$input" in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input="`pwd`/$input" ;; esac pairlist= while test "$#" -ne 0; do if test "$1" = "--"; then shift break fi pairlist="$pairlist $1" shift done # The program to run. prog="$1" shift # Make any relative path in $prog absolute. case "$prog" in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog="`pwd`/$prog" ;; esac # FIXME: add hostname here for parallel makes that run commands on # other machines. But that might take us over the 14-char limit. dirname=ylwrap$$ trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then set X $pairlist shift first=yes # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot="no" if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot="yes" fi # The directory holding the input. input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'` # Quote $INPUT_DIR so we can use it in a regexp. # FIXME: really we should care about more than `.' and `\'. input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'` while test "$#" -ne 0; do from="$1" # Handle y_tab.c and y_tab.h output by DOS if test $y_tab_nodot = "yes"; then if test $from = "y.tab.c"; then from="y_tab.c" else if test $from = "y.tab.h"; then from="y_tab.h" fi fi fi if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend `../'. case "$2" in [\\/]* | ?:[\\/]*) target="$2";; *) target="../$2";; esac # We do not want to overwrite a header file if it hasn't # changed. This avoid useless recompilations. However the # parser itself (the first file) should always be updated, # because it is the destination of the .y.c rule in the # Makefile. Divert the output of all other files to a temporary # file so we can compare them to existing versions. if test $first = no; then realtarget="$target" target="tmp-`echo $target | sed s/.*[\\/]//g`" fi # Edit out `#line' or `#' directives. # # We don't want the resulting debug information to point at # an absolute srcdir; it is better for it to just mention the # .y file with no path. # # We want to use the real output file name, not yy.lex.c for # instance. # # We want the include guards to be adjusted too. FROM=`echo "$from" | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` TARGET=`echo "$2" | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \ -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$? # Check whether header files must be updated. if test $first = no; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$2" is unchanged rm -f "$target" else echo updating "$2" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the first file. This # is a blatant hack to let us support using "yacc -d". If -d # is not specified, we don't want an error when the header # file is "missing". if test $first = yes; then ret=1 fi fi shift shift first=no done else ret=$? fi # Remove the directory. cd .. rm -rf $dirname 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: Linux-PAM-1.1.8/build-aux/config.sub0000755000000000000000000010316712216527534014016 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 # Free Software Foundation, Inc. timestamp='2009-11-20' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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. # Please send patches to . Submit a context # diff and a properly formatted GNU 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. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # 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, 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." 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* | \ kopensolaris*-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 | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -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 \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | 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 \ | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # 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-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | 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-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | 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-* | tile-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # 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 ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; 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 ;; cr16) basic_machine=cr16-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 ;; dicos) basic_machine=i686-pc os=-dicos ;; 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 ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; 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 ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; 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 ;; sh5el) basic_machine=sh5le-unknown ;; 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 ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; 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 ;; z80-*-coff) basic_machine=z80-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[24]aeb | 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. -auroraux) os=-auroraux ;; -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* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -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* | -cegcc* \ | -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* | -drops* | -es*) # 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 ;; -dicos*) os=-dicos ;; -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 ;; mep-*) os=-elf ;; 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 ;; -cnk*|-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: Linux-PAM-1.1.8/build-aux/missing0000755000000000000000000002623312216527534013430 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 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, see . # 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=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # 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' autom4te touch the output file, or create a stub one 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] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. 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 # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # 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). This is about non-GNU programs, so use $1 not # $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 $program 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 "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` 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 test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -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 test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -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 "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? 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 "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: Linux-PAM-1.1.8/build-aux/config.guess0000755000000000000000000013031112216527534014342 00000000000000#! /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, 2007, 2008, 2009 # Free Software Foundation, Inc. timestamp='2009-11-20' # 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 (context # diff format) to and include a 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. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD 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, 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." 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 ;; sh5el) machine=sh5le-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 -q __ELF__ 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}-${VENDOR}-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-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-${VENDOR}-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-${VENDOR}-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-${VENDOR}-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-${VENDOR}-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 ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; 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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-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-${VENDOR}-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:*:[456]) 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 -q __LP64__ 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}-${VENDOR}-osf1mk else echo ${UNAME_MACHINE}-${VENDOR}-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-${VENDOR}-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *: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 ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-${VENDOR}-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-${VENDOR}-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-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-${VENDOR}-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-${VENDOR}-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-${VENDOR}-`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 ;; 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 -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu else echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-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 ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}" 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:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-${VENDOR}-linux-gnu exit ;; padre:Linux:*:*) echo sparc-${VENDOR}-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-${VENDOR}-linux-gnu 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 ;; ppc64:Linux:*:*) echo powerpc64-${VENDOR}-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-${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 ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu 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}-${VENDOR}-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-${VENDOR}-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-${VENDOR}-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}-${VENDOR}-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 i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-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-${VENDOR}-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; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' 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; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-${VENDOR}-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-${VENDOR}-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 ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku 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 ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-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 i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; 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}-${VENDOR}-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-${VENDOR}-tops10 exit ;; *:TENEX:*:*) echo pdp10-${VENDOR}-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-${VENDOR}-tops20 exit ;; *:ITS:*:*) echo pdp10-${VENDOR}-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-${VENDOR}-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 ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros 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: Linux-PAM-1.1.8/libpam_misc/0000755000000000000000000000000012216542310012455 500000000000000Linux-PAM-1.1.8/libpam_misc/misc_conv.c0000644000000000000000000002426712160065211014532 00000000000000/* * A generic conversation function for text based applications * * Written by Andrew Morgan */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #define INPUTSIZE PAM_MAX_MSG_SIZE /* maximum length of input+1 */ #define CONV_ECHO_ON 1 /* types of echo state */ #define CONV_ECHO_OFF 0 /* * external timeout definitions - these can be overriden by the * application. */ time_t pam_misc_conv_warn_time = 0; /* time when we warn */ time_t pam_misc_conv_die_time = 0; /* time when we timeout */ const char *pam_misc_conv_warn_line = N_("...Time is running out...\n"); const char *pam_misc_conv_die_line = N_("...Sorry, your time is up!\n"); int pam_misc_conv_died=0; /* application can probe this for timeout */ /* * These functions are for binary prompt manipulation. * The manner in which a binary prompt is processed is application * specific, so these function pointers are provided and can be * initialized by the application prior to the conversation function * being used. */ static void pam_misc_conv_delete_binary(void *appdata UNUSED, pamc_bp_t *delete_me) { PAM_BP_RENEW(delete_me, 0, 0); } int (*pam_binary_handler_fn)(void *appdata, pamc_bp_t *prompt_p) = NULL; void (*pam_binary_handler_free)(void *appdata, pamc_bp_t *prompt_p) = pam_misc_conv_delete_binary; /* the following code is used to get text input */ static volatile int expired=0; /* return to the previous signal handling */ static void reset_alarm(struct sigaction *o_ptr) { (void) alarm(0); /* stop alarm clock - if still ticking */ (void) sigaction(SIGALRM, o_ptr, NULL); } /* this is where we intercept the alarm signal */ static void time_is_up(int ignore UNUSED) { expired = 1; } /* set the new alarm to hit the time_is_up() function */ static int set_alarm(int delay, struct sigaction *o_ptr) { struct sigaction new_sig; sigemptyset(&new_sig.sa_mask); new_sig.sa_flags = 0; new_sig.sa_handler = time_is_up; if ( sigaction(SIGALRM, &new_sig, o_ptr) ) { return 1; /* setting signal failed */ } if ( alarm(delay) ) { (void) sigaction(SIGALRM, o_ptr, NULL); return 1; /* failed to set alarm */ } return 0; /* all seems to have worked */ } /* return the number of seconds to next alarm. 0 = no delay, -1 = expired */ static int get_delay(void) { time_t now; expired = 0; /* reset flag */ (void) time(&now); /* has the quit time past? */ if (pam_misc_conv_die_time && now >= pam_misc_conv_die_time) { fprintf(stderr,"%s",pam_misc_conv_die_line); pam_misc_conv_died = 1; /* note we do not reset the die_time */ return -1; /* time is up */ } /* has the warning time past? */ if (pam_misc_conv_warn_time && now >= pam_misc_conv_warn_time) { fprintf(stderr, "%s", pam_misc_conv_warn_line); pam_misc_conv_warn_time = 0; /* reset warn_time */ /* indicate remaining delay - if any */ return (pam_misc_conv_die_time ? pam_misc_conv_die_time - now:0 ); } /* indicate possible warning delay */ if (pam_misc_conv_warn_time) return (pam_misc_conv_warn_time - now); else if (pam_misc_conv_die_time) return (pam_misc_conv_die_time - now); else return 0; } /* 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[INPUTSIZE]; struct sigaction old_sig; int delay, nc = -1, have_term = 0; sigset_t oset, nset; 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 ) { D(("")); *retstr = NULL; return -1; } memcpy(&term_tmp, &term_before, sizeof(term_tmp)); if (!echo) { term_tmp.c_lflag &= ~(ECHO); } have_term = 1; /* * We make a simple attempt to block TTY signals from suspending * the conversation without giving PAM a chance to clean up. */ sigemptyset(&nset); sigaddset(&nset, SIGTSTP); (void) sigprocmask(SIG_BLOCK, &nset, &oset); } else if (!echo) { D(("")); } /* set up the signal handling */ delay = get_delay(); /* reading the line */ while (delay >= 0) { /* this may, or may not set echo off -- drop pending input */ if (have_term) (void) tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_tmp); fprintf(stderr, "%s", prompt); if ( delay > 0 && set_alarm(delay, &old_sig) ) { D(("")); break; } else { if (have_term) nc = read(STDIN_FILENO, line, INPUTSIZE-1); else /* we must read one line only */ for (nc = 0; nc < INPUTSIZE-1 && (nc?line[nc-1]:0) != '\n'; nc++) { int rv; if ((rv=read(STDIN_FILENO, line+nc, 1)) != 1) { if (rv < 0) nc = rv; break; } } if (have_term) { (void) tcsetattr(STDIN_FILENO, TCSADRAIN, &term_before); if (!echo || expired) /* do we need a newline? */ fprintf(stderr,"\n"); } if ( delay > 0 ) { reset_alarm(&old_sig); } if (expired) { delay = get_delay(); } else if (nc > 0) { /* we got some user input */ D(("we got some user input")); if (nc > 0 && line[nc-1] == '\n') { /* terminate */ line[--nc] = '\0'; } else { if (echo) { fprintf(stderr, "\n"); } line[nc] = '\0'; } *retstr = x_strdup(line); _pam_overwrite(line); goto cleanexit; /* return malloc()ed string */ } else if (nc == 0) { /* Ctrl-D */ D(("user did not want to type anything")); *retstr = NULL; if (echo) { fprintf(stderr, "\n"); } goto cleanexit; /* return malloc()ed "" */ } else if (nc == -1) { /* Don't loop forever if read() returns -1. */ D(("error reading input from the user: %m")); if (echo) { fprintf(stderr, "\n"); } *retstr = NULL; goto cleanexit; /* return NULL */ } } } /* getting here implies that the timer expired */ D(("the timer appears to have expired")); *retstr = NULL; _pam_overwrite(line); cleanexit: if (have_term) { (void) sigprocmask(SIG_SETMASK, &oset, NULL); (void) tcsetattr(STDIN_FILENO, TCSADRAIN, &term_before); } return nc; } /* end of read_string functions */ /* * This conversation function is supposed to be a generic PAM one. * Unfortunately, it is _not_ completely compatible with the Solaris PAM * codebase. * * Namely, for msgm's that contain multiple prompts, this function * interprets "const struct pam_message **msgm" as equivalent to * "const struct pam_message *msgm[]". The Solaris module * implementation interprets the **msgm object as a pointer to a * pointer to an array of "struct pam_message" objects (that is, a * confusing amount of pointer indirection). */ int misc_conv(int num_msg, const struct pam_message **msgm, struct pam_response **response, void *appdata_ptr) { int count=0; struct pam_response *reply; 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; int nc; switch (msgm[count]->msg_style) { case PAM_PROMPT_ECHO_OFF: nc = read_string(CONV_ECHO_OFF,msgm[count]->msg, &string); if (nc < 0) { goto failed_conversation; } break; case PAM_PROMPT_ECHO_ON: nc = read_string(CONV_ECHO_ON,msgm[count]->msg, &string); if (nc < 0) { goto failed_conversation; } break; case PAM_ERROR_MSG: if (fprintf(stderr,"%s\n",msgm[count]->msg) < 0) { goto failed_conversation; } break; case PAM_TEXT_INFO: if (fprintf(stdout,"%s\n",msgm[count]->msg) < 0) { goto failed_conversation; } break; case PAM_BINARY_PROMPT: { pamc_bp_t binary_prompt = NULL; if (!msgm[count]->msg || !pam_binary_handler_fn) { goto failed_conversation; } PAM_BP_RENEW(&binary_prompt, PAM_BP_RCONTROL(msgm[count]->msg), PAM_BP_LENGTH(msgm[count]->msg)); PAM_BP_FILL(binary_prompt, 0, PAM_BP_LENGTH(msgm[count]->msg), PAM_BP_RDATA(msgm[count]->msg)); if (pam_binary_handler_fn(appdata_ptr, &binary_prompt) != PAM_SUCCESS || (binary_prompt == NULL)) { goto failed_conversation; } string = (char *) binary_prompt; binary_prompt = NULL; break; } default: fprintf(stderr, _("erroneous conversation (%d)\n"), 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; } } *response = reply; reply = NULL; return PAM_SUCCESS; failed_conversation: D(("the conversation failed")); 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_BINARY_PROMPT: { void *bt_ptr = reply[count].resp; pam_binary_handler_free(appdata_ptr, bt_ptr); 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; } Linux-PAM-1.1.8/libpam_misc/help_env.c0000644000000000000000000000346012160065211014342 00000000000000/* * $Id$ * * This file was written by Andrew G. Morgan * */ #include "config.h" #include #include #include #include /* * This function should be used to carefully dispose of the copied * environment. * * usage: env = pam_misc_drop_env(env); */ char **pam_misc_drop_env(char **dump) { int i; for (i=0; dump[i] != NULL; ++i) { D(("dump[%d]=`%s'", i, dump[i])); _pam_overwrite(dump[i]); _pam_drop(dump[i]); } _pam_drop(dump); return NULL; } /* * This function takes the supplied environment and uploads it to be * the PAM one. */ int pam_misc_paste_env(pam_handle_t *pamh, const char * const * user_env) { for (; user_env && *user_env; ++user_env) { int retval; D(("uploading: %s", *user_env)); retval = pam_putenv(pamh, *user_env); if (retval != PAM_SUCCESS) { D(("error setting %s: %s", *user_env, pam_strerror(pamh,retval))); return retval; } } D(("done.")); return PAM_SUCCESS; } /* * This is a wrapper to make pam behave in the way that setenv() does. */ int pam_misc_setenv(pam_handle_t *pamh, const char *name , const char *value, int readonly) { char *tmp; int retval; if (readonly) { const char *etmp; /* we check if the variable is there already */ etmp = pam_getenv(pamh, name); if (etmp != NULL) { D(("failed to set readonly variable: %s", name)); return PAM_PERM_DENIED; /* not allowed to overwrite */ } } if (asprintf(&tmp, "%s=%s", name, value) >= 0) { D(("pam_putt()ing: %s", tmp)); retval = pam_putenv(pamh, tmp); _pam_overwrite(tmp); /* purge */ _pam_drop(tmp); /* forget */ } else { D(("malloc failure")); retval = PAM_BUF_ERR; } return retval; } Linux-PAM-1.1.8/libpam_misc/libpam_misc.map0000644000000000000000000000050512160065211015351 00000000000000LIBPAM_MISC_1.0 { global: misc_conv; pam_misc_conv_warn_time; pam_misc_conv_die_time; pam_misc_conv_warn_line; pam_misc_conv_die_line; pam_misc_conv_died; pam_binary_handler_fn; pam_binary_handler_free; pam_misc_paste_env; pam_misc_drop_env; pam_misc_setenv; local: *; }; Linux-PAM-1.1.8/libpam_misc/Makefile.am0000644000000000000000000000104712160065211014431 00000000000000# # Copyright (c) 2005 Thorsten Kukuk # CLEANFILES = *~ EXTRA_DIST = libpam_misc.map include_HEADERS = include/security/pam_misc.h AM_CFLAGS = -I$(top_srcdir)/libpam/include \ -I$(top_srcdir)/libpamc/include -I$(srcdir)/include libpam_misc_la_LDFLAGS = -no-undefined -version-info 82:0:82 if HAVE_VERSIONING libpam_misc_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libpam_misc.map endif libpam_misc_la_LIBADD = $(top_builddir)/libpam/libpam.la lib_LTLIBRARIES = libpam_misc.la libpam_misc_la_SOURCES = help_env.c misc_conv.c Linux-PAM-1.1.8/libpam_misc/include/0000755000000000000000000000000012216542310014100 500000000000000Linux-PAM-1.1.8/libpam_misc/include/security/0000755000000000000000000000000012216542310015747 500000000000000Linux-PAM-1.1.8/libpam_misc/include/security/pam_misc.h0000644000000000000000000000276612160065211017641 00000000000000/* $Id$ */ #ifndef __PAMMISC_H #define __PAMMISC_H #include #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* include some useful macros */ #include /* functions defined in pam_misc.* libraries */ extern int misc_conv(int num_msg, const struct pam_message **msgm, struct pam_response **response, void *appdata_ptr); #include extern time_t pam_misc_conv_warn_time; /* time that we should warn user */ extern time_t pam_misc_conv_die_time; /* cut-off time for input */ extern const char *pam_misc_conv_warn_line; /* warning notice */ extern const char *pam_misc_conv_die_line; /* cut-off remark */ extern int pam_misc_conv_died; /* 1 = cut-off time reached (0 not) */ extern int (*pam_binary_handler_fn)(void *appdata, pamc_bp_t *prompt_p); extern void (*pam_binary_handler_free)(void *appdata, pamc_bp_t *prompt_p); /* * Environment helper functions */ /* transcribe given environment (to pam) */ extern int pam_misc_paste_env(pam_handle_t *pamh , const char * const * user_env); /* delete environment as obtained from (pam_getenvlist) */ extern char **pam_misc_drop_env(char **env); /* provide something like the POSIX setenv function for the (Linux-)PAM * environment. */ extern int pam_misc_setenv(pam_handle_t *pamh, const char *name , const char *value, int readonly); #ifdef __cplusplus } #endif /* def __cplusplus */ #endif /* ndef __PAMMISC_H */ Linux-PAM-1.1.8/libpam_misc/Makefile.in0000644000000000000000000004723012216527535014464 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/libpam_misc.map subdir = libpam_misc DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libpam_misc_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la am_libpam_misc_la_OBJECTS = help_env.lo misc_conv.lo libpam_misc_la_OBJECTS = $(am_libpam_misc_la_OBJECTS) libpam_misc_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libpam_misc_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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 = $(libpam_misc_la_SOURCES) DIST_SOURCES = $(libpam_misc_la_SOURCES) HEADERS = $(include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = libpam_misc.map include_HEADERS = include/security/pam_misc.h AM_CFLAGS = -I$(top_srcdir)/libpam/include \ -I$(top_srcdir)/libpamc/include -I$(srcdir)/include libpam_misc_la_LDFLAGS = -no-undefined -version-info 82:0:82 \ $(am__append_1) libpam_misc_la_LIBADD = $(top_builddir)/libpam/libpam.la lib_LTLIBRARIES = libpam_misc.la libpam_misc_la_SOURCES = help_env.c misc_conv.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libpam_misc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libpam_misc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_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 libpam_misc.la: $(libpam_misc_la_OBJECTS) $(libpam_misc_la_DEPENDENCIES) $(libpam_misc_la_LINK) -rpath $(libdir) $(libpam_misc_la_OBJECTS) $(libpam_misc_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help_env.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc_conv.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(includedir)" && rm -f $$files 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; 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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool 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-includeHEADERS install-info \ install-info-am install-libLTLIBRARIES 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 uninstall-includeHEADERS \ uninstall-libLTLIBRARIES # 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: Linux-PAM-1.1.8/examples/0000755000000000000000000000000012216542314012020 500000000000000Linux-PAM-1.1.8/examples/blank.c0000644000000000000000000001031712160065211013167 00000000000000/* * $Id$ */ /* Andrew Morgan (morgan@parc.power.net) -- a self contained `blank' * application * * I am not very proud of this code. It makes use of a possibly ill- * defined pamh pointer to call pam_strerror() with. The reason that * I was sloppy with this is historical (pam_strerror, prior to 0.59, * did not require a pamh argument) and if this program is used as a * model for anything, I should wish that you will take this error into * account. */ #include #include #include #include /* ------ some local (static) functions ------- */ static void bail_out(pam_handle_t *pamh, int really, int code, const char *fn) { fprintf(stderr,"==> called %s()\n got: `%s'\n", fn, pam_strerror(pamh, code)); if (really && code) exit (1); } /* ------ some static data objects ------- */ static struct pam_conv conv = { misc_conv, NULL }; /* ------- the application itself -------- */ int main(int argc, char **argv) { pam_handle_t *pamh=NULL; char *username=NULL; int retcode; /* did the user call with a username as an argument ? */ if (argc > 2) { fprintf(stderr,"usage: %s [username]\n",argv[0]); } else if (argc == 2) { username = argv[1]; } /* initialize the Linux-PAM library */ retcode = pam_start("blank", username, &conv, &pamh); bail_out(pamh,1,retcode,"pam_start"); /* test the environment stuff */ { #define MAXENV 15 const char *greek[MAXENV] = { "a=alpha", "b=beta", "c=gamma", "d=delta", "e=epsilon", "f=phi", "g=psi", "h=eta", "i=iota", "j=mu", "k=nu", "l=zeta", "h=", "d", "k=xi" }; char **env; int i; for (i=0; i # CLEANFILES = *~ EXTRA_DIST = README AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -I$(top_srcdir)/libpam_misc/include LDADD = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la noinst_PROGRAMS = xsh vpass blank check_user Linux-PAM-1.1.8/examples/README0000644000000000000000000000063612160065211012617 00000000000000 (now we are getting networked apps, be careful to try and test on a securely isolated system!) These programs grant no privileges, but they give an idea of how well the modules are working. blank is new as of Linux-PAM-0.21. If you are writing/modifying an application it might be a place to start... xsh is new as of Linux-PAM-0.31, it is identical to blank, but invokes /bin/sh if the user is authenticated. Linux-PAM-1.1.8/examples/check_user.c0000644000000000000000000000257412160065211014221 00000000000000/* $Id$ This program was contributed by Shane Watts slight modifications by AGM. You need to add the following (or equivalent) to the /etc/pam.conf file. # check authorization check auth required pam_unix_auth.so check account required pam_unix_acct.so */ #include #include #include static struct pam_conv conv = { misc_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; int retval; const char *user="nobody"; if(argc == 2) { user = argv[1]; } if(argc > 2) { fprintf(stderr, "Usage: check_user [username]\n"); exit(1); } retval = pam_start("check", user, &conv, &pamh); if (retval == PAM_SUCCESS) retval = pam_authenticate(pamh, 0); /* is user really user? */ if (retval == PAM_SUCCESS) retval = pam_acct_mgmt(pamh, 0); /* permitted access? */ /* This is where we have been authorized or not. */ if (retval == PAM_SUCCESS) { fprintf(stdout, "Authenticated\n"); } else { fprintf(stdout, "Not Authenticated\n"); } if (pam_end(pamh,retval) != PAM_SUCCESS) { /* close Linux-PAM */ pamh = NULL; fprintf(stderr, "check_user: failed to release authenticator\n"); exit(1); } return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */ } Linux-PAM-1.1.8/examples/Makefile.in0000644000000000000000000004236312216527535014025 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = xsh$(EXEEXT) vpass$(EXEEXT) blank$(EXEEXT) \ check_user$(EXEEXT) subdir = examples DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) blank_SOURCES = blank.c blank_OBJECTS = blank.$(OBJEXT) blank_LDADD = $(LDADD) blank_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la check_user_SOURCES = check_user.c check_user_OBJECTS = check_user.$(OBJEXT) check_user_LDADD = $(LDADD) check_user_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la vpass_SOURCES = vpass.c vpass_OBJECTS = vpass.$(OBJEXT) vpass_LDADD = $(LDADD) vpass_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la xsh_SOURCES = xsh.c xsh_OBJECTS = xsh.$(OBJEXT) xsh_LDADD = $(LDADD) xsh_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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 = blank.c check_user.c vpass.c xsh.c DIST_SOURCES = blank.c check_user.c vpass.c xsh.c ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = README AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -I$(top_srcdir)/libpam_misc/include LDADD = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu examples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list blank$(EXEEXT): $(blank_OBJECTS) $(blank_DEPENDENCIES) @rm -f blank$(EXEEXT) $(LINK) $(blank_OBJECTS) $(blank_LDADD) $(LIBS) check_user$(EXEEXT): $(check_user_OBJECTS) $(check_user_DEPENDENCIES) @rm -f check_user$(EXEEXT) $(LINK) $(check_user_OBJECTS) $(check_user_LDADD) $(LIBS) vpass$(EXEEXT): $(vpass_OBJECTS) $(vpass_DEPENDENCIES) @rm -f vpass$(EXEEXT) $(LINK) $(vpass_OBJECTS) $(vpass_LDADD) $(LIBS) xsh$(EXEEXT): $(xsh_OBJECTS) $(xsh_DEPENDENCIES) @rm -f xsh$(EXEEXT) $(LINK) $(xsh_OBJECTS) $(xsh_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blank.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_user.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vpass.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsh.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: 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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS 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: Linux-PAM-1.1.8/examples/vpass.c0000644000000000000000000000164012160065211013233 00000000000000 #include "config.h" #include #include #include #include #include #include static int test_conv (int num_msg UNUSED, const struct pam_message **msgm UNUSED, struct pam_response **response UNUSED, void *appdata_ptr UNUSED) { return 0; } static struct pam_conv conv = { test_conv, NULL }; int main(void) { char *user; pam_handle_t *pamh; struct passwd *pw; uid_t uid; int res; uid = geteuid(); pw = getpwuid(uid); if (pw) { user = pw->pw_name; } else { fprintf(stderr, "Invalid userid: %lu\n", (unsigned long) uid); exit(1); } pam_start("vpass", user, &conv, &pamh); pam_set_item(pamh, PAM_TTY, "/dev/tty"); if ((res = pam_authenticate(pamh, 0)) != PAM_SUCCESS) { fprintf(stderr, "Oops: %s\n", pam_strerror(pamh, res)); exit(1); } pam_end(pamh, res); exit(0); } Linux-PAM-1.1.8/examples/xsh.c0000644000000000000000000001105512160065211012702 00000000000000/* Andrew Morgan (morgan@kernel.org) -- an example application * that invokes a shell, based on blank.c */ #include "config.h" #include #include #include #include #include #include #include /* ------ some local (static) functions ------- */ static void bail_out(pam_handle_t *pamh,int really, int code, const char *fn) { fprintf(stderr,"==> called %s()\n got: `%s'\n", fn, pam_strerror(pamh,code)); if (really && code) exit (1); } /* ------ some static data objects ------- */ static struct pam_conv conv = { misc_conv, NULL }; /* ------- the application itself -------- */ int main(int argc, char **argv) { pam_handle_t *pamh=NULL; const void *username=NULL; const char *service="xsh"; int retcode; /* did the user call with a username as an argument ? * did they also */ if (argc > 3) { fprintf(stderr,"usage: %s [username [service-name]]\n",argv[0]); } if ((argc >= 2) && (argv[1][0] != '-')) { username = argv[1]; } if (argc == 3) { service = argv[2]; } /* initialize the Linux-PAM library */ retcode = pam_start(service, username, &conv, &pamh); bail_out(pamh,1,retcode,"pam_start"); /* fill in the RUSER and RHOST etc. fields */ { char buffer[100]; struct passwd *pw; const char *tty; pw = getpwuid(getuid()); if (pw != NULL) { retcode = pam_set_item(pamh, PAM_RUSER, pw->pw_name); bail_out(pamh,1,retcode,"pam_set_item(PAM_RUSER)"); } retcode = gethostname(buffer, sizeof(buffer)-1); if (retcode) { perror("failed to look up hostname"); retcode = pam_end(pamh, PAM_ABORT); bail_out(pamh,1,retcode,"pam_end"); } retcode = pam_set_item(pamh, PAM_RHOST, buffer); bail_out(pamh,1,retcode,"pam_set_item(PAM_RHOST)"); tty = ttyname(fileno(stdin)); if (tty) { retcode = pam_set_item(pamh, PAM_TTY, tty); bail_out(pamh,1,retcode,"pam_set_item(PAM_RHOST)"); } } /* to avoid using goto we abuse a loop here */ for (;;) { /* authenticate the user --- `0' here, could have been PAM_SILENT * | PAM_DISALLOW_NULL_AUTHTOK */ retcode = pam_authenticate(pamh, 0); bail_out(pamh,0,retcode,"pam_authenticate"); /* has the user proved themself valid? */ if (retcode != PAM_SUCCESS) { fprintf(stderr,"%s: invalid request\n",argv[0]); break; } /* the user is valid, but should they have access at this time? */ retcode = pam_acct_mgmt(pamh, 0); /* `0' could be as above */ bail_out(pamh,0,retcode,"pam_acct_mgmt"); if (retcode == PAM_NEW_AUTHTOK_REQD) { fprintf(stderr,"Application must request new password...\n"); retcode = pam_chauthtok(pamh,PAM_CHANGE_EXPIRED_AUTHTOK); bail_out(pamh,0,retcode,"pam_chauthtok"); } if (retcode != PAM_SUCCESS) { fprintf(stderr,"%s: invalid request\n",argv[0]); break; } /* `0' could be as above */ retcode = pam_setcred(pamh, PAM_ESTABLISH_CRED); bail_out(pamh,0,retcode,"pam_setcred"); if (retcode != PAM_SUCCESS) { fprintf(stderr,"%s: problem setting user credentials\n" ,argv[0]); break; } /* open a session for the user --- `0' could be PAM_SILENT */ retcode = pam_open_session(pamh,0); bail_out(pamh,0,retcode,"pam_open_session"); if (retcode != PAM_SUCCESS) { fprintf(stderr,"%s: problem opening a session\n",argv[0]); break; } pam_get_item(pamh, PAM_USER, &username); fprintf(stderr, "The user [%s] has been authenticated and `logged in'\n", (const char *)username); /* this is always a really bad thing for security! */ retcode = system("/bin/sh"); /* close a session for the user --- `0' could be PAM_SILENT * it is possible that this pam_close_call is in another program.. */ retcode = pam_close_session(pamh,0); bail_out(pamh,0,retcode,"pam_close_session"); if (retcode != PAM_SUCCESS) { fprintf(stderr,"%s: problem closing a session\n",argv[0]); break; } /* `0' could be as above */ retcode = pam_setcred(pamh, PAM_DELETE_CRED); bail_out(pamh,0,retcode,"pam_setcred"); if (retcode != PAM_SUCCESS) { fprintf(stderr,"%s: problem deleting user credentials\n" ,argv[0]); break; } break; /* don't go on for ever! */ } /* close the Linux-PAM library */ retcode = pam_end(pamh, PAM_SUCCESS); pamh = NULL; bail_out(pamh,1,retcode,"pam_end"); return (0); } Linux-PAM-1.1.8/AUTHORS0000644000000000000000000000034612160065211011167 00000000000000Original authors and current maintainers of Linux-PAM: Andrew G. Morgan Dmitry V. Levin Thorsten Kukuk Sebastien Tricaud Tomas Mraz Linux-PAM-1.1.8/xtests/0000755000000000000000000000000012216542314011534 500000000000000Linux-PAM-1.1.8/xtests/tst-pam_access2.c0000644000000000000000000000752212160065211014610 00000000000000/* * 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. */ /* test case: Check the following line in access.conf: -:ALL EXCEPT (tstpamaccess):LOCAL User is not member of group tstpamaccess, pam_authenticate should fail. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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 ("!!"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh = NULL; const char *user="tstpamaccess2"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_access2", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access2: pam_start returned %d\n", retval); return 1; } retval = pam_set_item (pamh, PAM_TTY, "/dev/tty1"); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access2: pam_set_item(PAM_TTY) returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_PERM_DENIED) { if (debug) fprintf (stderr, "pam_access2: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access2: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_access4.sh0000755000000000000000000000021012160065211014770 00000000000000#!/bin/bash /usr/sbin/useradd -p '!!' tstpamaccess4 ./tst-pam_access4 RET=$? /usr/sbin/userdel -r tstpamaccess4 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_pwhistory1.sh0000644000000000000000000000020712160065211015577 00000000000000#!/bin/bash /usr/sbin/useradd tstpampwhistory ./tst-pam_pwhistory1 RET=$? /usr/sbin/userdel -r tstpampwhistory 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_group1.sh0000755000000000000000000000043212160065211014666 00000000000000#!/bin/bash /usr/sbin/groupadd tstpamgrpg /usr/sbin/useradd -p '!!' tstpamgrp /usr/sbin/useradd -p '!!' tstpamgrp2 ./tst-pam_group1 RET=$? /usr/sbin/userdel -r tstpamgrp 2> /dev/null /usr/sbin/userdel -r tstpamgrp2 2> /dev/null /usr/sbin/groupdel tstpamgrpg 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_pwhistory1.pamd0000644000000000000000000000036212160065211016110 00000000000000#%PAM-1.0 auth required pam_permit.so account required pam_permit.so password required pam_pwhistory.so remember=10 retry=1 enforce_for_root password required pam_unix.so use_authtok md5 session required pam_permit.so Linux-PAM-1.1.8/xtests/tst-pam_substack3.pamd0000644000000000000000000000026112160065211015657 00000000000000#%PAM-1.0 # Reset in the substack resets to state as of it was # in the beginning of substack evaluation auth required pam_permit.so auth substack tst-pam_substack3a Linux-PAM-1.1.8/xtests/tst-pam_access1.c0000644000000000000000000000751212160065211014606 00000000000000/* * 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. */ /* test case: Check the following line in access.conf: -:ALL EXCEPT (tstpamaccess):LOCAL User is member of group tstpamaccess, pam_authenticate should pass. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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 ("!!"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh = NULL; const char *user="tstpamaccess1"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_access1", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access1: pam_start returned %d\n", retval); return 1; } retval = pam_set_item (pamh, PAM_TTY, "/dev/tty1"); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access1: pam_set_item(PAM_TTY) returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access1: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access1: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_dispatch3.c0000644000000000000000000000545712160065211015154 00000000000000/* * 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. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static struct pam_conv conv = { misc_conv, NULL }; /* Check that errors of optional modules are ignored and that required modules after a sufficient one are not executed. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="nobody"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_dispatch3", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test3: pam_start returned %d\n", retval); return 1; } retval = pam_authenticate(pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test3: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end(pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test3: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_substack1.sh0000755000000000000000000000006712160065211015355 00000000000000#!/bin/bash exec ./tst-pam_authfail tst-pam_substack1 Linux-PAM-1.1.8/xtests/tst-pam_cracklib2.pamd0000644000000000000000000000006712160065211015615 00000000000000#%PAM-1.0 password required pam_cracklib.so minclass=4 Linux-PAM-1.1.8/xtests/tst-pam_succeed_if1.c0000644000000000000000000000756712160065211015450 00000000000000/* * 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. */ /* test case: Check the following line in PAM config file: auth required pam_succeed_if.so user in tstpamtest:pamtest User is pamtest or tstpamtest, both should succeed. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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 ("!!"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; static int debug = 0; static int test_with_user (const char *user) { pam_handle_t *pamh = NULL; int retval; retval = pam_start("tst-pam_succeed_if1", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_succeed_if1: pam_start returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access1: pam_authenticate(%s) returned %d\n", user, retval); return 1; } retval = pam_end (pamh, retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access1: pam_end returned %d\n", retval); return 1; } return 0; } int main(int argc, char *argv[]) { const char *user1 = "tstpamtest"; const char *user2 = "pamtest"; int retval; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = test_with_user (user1); if (retval == 0) retval = test_with_user (user2); return retval; } Linux-PAM-1.1.8/xtests/tst-pam_unix3.c0000644000000000000000000001102612160065211014325 00000000000000/* * 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. */ /* * Check bigcrypt handling * First use exact password, 9 characters (24 characters crypt) * Second use shorter password, 8 characters * Third use wrong password, 9 characters */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static int in_test; /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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; /* first call get a password, second one a too short one */ if (in_test == 1) reply[count].resp = strdup ("pamunix01"); else if (in_test == 2) reply[count].resp = strdup ("pamunix0"); else reply[count].resp = strdup ("pamunix11"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; /* Check that errors of optional modules are ignored and that required modules after a sufficient one are not executed. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="tstpamunix"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_unix3", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "unix3: pam_start returned %d\n", retval); return 1; } /* Try one, first input is correct, second is NULL */ in_test = 1; retval = pam_authenticate (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "unix3-1: pam_authenticate returned %d\n", retval); return 1; } /* Try two, second input is too short */ in_test = 2; retval = pam_authenticate (pamh, 0); if (retval != PAM_AUTH_ERR) { if (debug) fprintf (stderr, "unix3-2: pam_authenticate returned %d\n", retval); return 1; } /* Third try, third input is wrong */ in_test = 3; retval = pam_authenticate (pamh, 0); if (retval != PAM_AUTH_ERR) { if (debug) fprintf (stderr, "unix3-3: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "unix3: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_substack2.pamd0000644000000000000000000000032612160065211015660 00000000000000#%PAM-1.0 # Even if the substack fails with requisite # the whole stack should succeed. auth substack tst-pam_substack2a auth [success=reset] pam_permit.so auth required pam_debug.so auth=success Linux-PAM-1.1.8/xtests/tst-pam_dispatch5.c0000644000000000000000000000542612160065211015152 00000000000000/* * 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. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static struct pam_conv conv = { misc_conv, NULL }; /* jump after the end of the stack and make sure we don't seg.fault. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="nobody"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_dispatch5", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_dispatch5: pam_start returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_PERM_DENIED) { if (debug) fprintf (stderr, "pam_dispatch5: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_dispatch5: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_substack4.sh0000755000000000000000000000007212160065211015354 00000000000000#!/bin/bash exec ./tst-pam_authsucceed tst-pam_substack4 Linux-PAM-1.1.8/xtests/tst-pam_time1.pamd0000644000000000000000000000024012160065211014771 00000000000000#%PAM-1.0 auth required pam_permit.so account required pam_time.so password required pam_permit.so session required pam_permit.so Linux-PAM-1.1.8/xtests/tst-pam_assemble_line1.sh0000755000000000000000000000007412160065211016336 00000000000000#!/bin/bash exec ./tst-pam_authfail tst-pam_assemble_line1 Linux-PAM-1.1.8/xtests/tst-pam_dispatch4.c0000644000000000000000000000565212160065211015152 00000000000000/* * 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. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static struct pam_conv conv = { misc_conv, NULL }; /* Check that jumps are processed correctly. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="nobody"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_dispatch4", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_dispatch4: pam_start returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_dispatch4: pam_authenticate returned %d\n", retval); return 1; } retval = pam_acct_mgmt (pamh, 0); if (retval == PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_dispatch4: pam_acct_mgmt returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test4: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_group1.c0000644000000000000000000001253112160065211014476 00000000000000/* * 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. */ /* test case: Check the following line in group.conf: tst-pam_group1;*;tstpamgrp;Al0000-2400;tstpamgrpg pam_group should add group tstpamgrpg to user tstpamgrp, but not to tstpamgrp2. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #define GROUP_BLK 10 #define blk_size(len) (((len-1 + GROUP_BLK)/GROUP_BLK)*GROUP_BLK) /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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 ("!!"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; static int debug = 0; static int run_test (const char *user, gid_t groupid, int needit) { pam_handle_t *pamh = NULL; int retval; int no_grps; retval = pam_start("tst-pam_group1", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_group1: pam_start returned %d\n", retval); return 1; } retval = pam_set_item (pamh, PAM_TTY, "/dev/tty1"); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_group1: pam_set_item(PAM_TTY) returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_group1: pam_authenticate returned %d\n", retval); return 1; } retval = pam_setcred (pamh, PAM_ESTABLISH_CRED); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_group1: pam_setcred returned %d\n", retval); return 1; } no_grps = getgroups(0, NULL); /* find the current number of groups */ if (no_grps > 0) { int i, found; gid_t *grps = calloc (blk_size (no_grps), sizeof(gid_t)); if (getgroups(no_grps, grps) < 0) { if (debug) fprintf (stderr, "pam_group1: getroups returned error: %m\n"); pam_end (pamh, PAM_SYSTEM_ERR); return 1; } found = 0; for (i = 0; i < no_grps; ++i) { #if 0 if (debug) fprintf (stderr, "gid[%d]=%d\n", i, grps[i]); #endif if (grps[i] == groupid) found = 1; } if ((needit && found) || (!needit && !found)) { /* everything is ok */ } else { pam_end (pamh, PAM_SYSTEM_ERR); if (debug) fprintf (stderr, "pam_group1: unexpected result for %s: needit=%d, found=%d\n", user, needit, found); return 1; } } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_group1: pam_end returned %d\n", retval); return 1; } return 0; } int main(int argc, char *argv[]) { struct group *grp; gid_t grpid; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; grp = getgrnam ("tstpamgrpg"); if (grp == NULL) return 1; grpid = grp->gr_gid; if (run_test ("root", grpid, 0) != 0 || run_test ("tstpamgrp2", grpid, 0) != 0 || run_test ("tstpamgrp", grpid, 1) != 0) return 1; return 0; } Linux-PAM-1.1.8/xtests/tst-pam_substack1a.pamd0000644000000000000000000000007412160065211016020 00000000000000#%PAM-1.0 auth sufficient pam_debug.so auth=success Linux-PAM-1.1.8/xtests/tst-pam_substack3.sh0000755000000000000000000000007212160065211015353 00000000000000#!/bin/bash exec ./tst-pam_authsucceed tst-pam_substack3 Linux-PAM-1.1.8/xtests/tst-pam_dispatch3.pamd0000644000000000000000000000030712160065211015640 00000000000000#%PAM-1.0 auth optional pam_debug.so auth=auth_err auth sufficient pam_debug.so auth=success auth required pam_debug.so auth=perm_denied account required pam_debug.so acct=acct_expired Linux-PAM-1.1.8/xtests/tst-pam_substack2.sh0000755000000000000000000000007212160065211015352 00000000000000#!/bin/bash exec ./tst-pam_authsucceed tst-pam_substack2 Linux-PAM-1.1.8/xtests/tst-pam_access2.sh0000755000000000000000000000032512160065211014775 00000000000000#!/bin/bash /usr/sbin/groupadd tstpamaccess /usr/sbin/useradd -p '!!' tstpamaccess2 ./tst-pam_access2 RET=$? /usr/sbin/userdel -r tstpamaccess2 2> /dev/null /usr/sbin/groupdel tstpamaccess 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_pwhistory1.c0000644000000000000000000001146012160065211015412 00000000000000/* * 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. */ /* * Check remember handling * Change ten times the password * Try the ten passwords again, should always be rejected * Try a new password, should succeed */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static int in_test; static const char *passwords[] = { "pamhistory01", "pamhistory02", "pamhistory03", "pamhistory04", "pamhistory05", "pamhistory06", "pamhistory07", "pamhistory08", "pamhistory09", "pamhistory10", "pamhistory01", "pamhistory02", "pamhistory03", "pamhistory04", "pamhistory05", "pamhistory06", "pamhistory07", "pamhistory08", "pamhistory09", "pamhistory10", "pamhistory11", "pamhistory01", "pamhistory02", "pamhistory03", "pamhistory04", "pamhistory05", "pamhistory06", "pamhistory07", "pamhistory08", "pamhistory09", "pamhistory10"}; static int debug; /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm, struct pam_response **response, void *appdata_ptr UNUSED) { struct pam_response *reply; int count; /* Sanity test. */ if (num_msg <= 0) return PAM_CONV_ERR; if (debug) fprintf (stderr, "msg_style=%d, msg=%s\n", msgm[0]->msg_style, msgm[0]->msg); if (msgm[0]->msg_style != 1) return PAM_SUCCESS; /* 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 (passwords[in_test]); if (debug) fprintf (stderr, "send password %s\n", reply[count].resp); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="tstpampwhistory"; int retval; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; for (in_test = 0; in_test < (int)(sizeof (passwords)/sizeof (char *)); in_test++) { retval = pam_start("tst-pam_pwhistory1", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pwhistory1-%d: pam_start returned %d\n", in_test, retval); return 1; } retval = pam_chauthtok (pamh, 0); if (in_test < 10 || in_test == 20) { if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pwhistory1-%d: pam_chauthtok returned %d\n", in_test, retval); return 1; } } else if (in_test < 20) { if (retval != PAM_MAXTRIES) { if (debug) fprintf (stderr, "pwhistory1-%d: pam_chauthtok returned %d\n", in_test, retval); return 1; } } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pwhistory1: pam_end returned %d\n", retval); return 1; } } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_limits1.sh0000755000000000000000000000020612160065211015032 00000000000000#!/bin/bash /usr/sbin/useradd -p '!!' tstpamlimits ./tst-pam_limits1 RET=$? /usr/sbin/userdel -r tstpamlimits 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_unix3.pamd0000644000000000000000000000023212160065211015021 00000000000000#%PAM-1.0 auth required pam_unix.so account required pam_unix.so password required pam_unix.so session required pam_unix.so Linux-PAM-1.1.8/xtests/tst-pam_unix4.c0000644000000000000000000001064712160065211014336 00000000000000/* * 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. */ /* * Check password change minimum days handling. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { struct pam_response *reply; int count; static int respnum = 0; static const char *resps[] = { "pamunix01", "TsTPAM01MAP", "TsTPAM01MAP" }; /* 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; /* Answer with appropriate response from the above array. */ for (count = 0; count < num_msg; ++count) { if (msgm[count]->msg_style == PAM_PROMPT_ECHO_OFF) { reply[count].resp_retcode = 0; reply[count].resp = strdup (resps[respnum % 3]); ++respnum; } } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; /* Check that errors of optional modules are ignored and that required modules after a sufficient one are not executed. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="tstpamunix"; int retval; int debug = 0; int fail; struct passwd *pwd; if (argc < 2 || (*argv[1] != 'f' && *argv[1] != 'p')) { fprintf (stderr, "Need fail or pass argument.\n"); return 2; } fail = *argv[1] == 'f'; if (argc > 2 && strcmp (argv[2], "-d") == 0) debug = 1; pwd = getpwnam (user); if (pwd == NULL) { if (debug) fprintf (stderr, "unix4: Missing tstpamunix user.\n"); return 2; } /* we must switch the real (not effective) user so the restrictions are enforced */ setreuid (pwd->pw_uid, -1); retval = pam_start("tst-pam_unix4", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "unix4: pam_start returned %d\n", retval); return 1; } retval = pam_chauthtok (pamh, 0); if ((!fail && retval != PAM_SUCCESS) || (fail && retval == PAM_SUCCESS)) { if (debug) fprintf (stderr, "unix4-1: pam_chauthtok returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "unix4: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_dispatch2.c0000644000000000000000000000567412160065211015154 00000000000000/* * 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. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static struct pam_conv conv = { misc_conv, NULL }; static int debug = 0; /* https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=196859 This stack should not return PAM_IGNORE to the application: auth [default=die] pam_debug.so auth=ignore */ static int test2 (void) { pam_handle_t *pamh=NULL; const char *user="nobody"; int retval; retval = pam_start("tst-pam_dispatch2", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test2: pam_start returned %d\n", retval); return 1; } retval = pam_authenticate(pamh, 0); if (retval != PAM_PERM_DENIED) { if (debug) fprintf (stderr, "test2: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end(pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test2: pam_end returned %d\n", retval); return 1; } return 0; } int main(int argc, char *argv[]) { if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; if (test2 ()) return 1; return 0; } Linux-PAM-1.1.8/xtests/tst-pam_limits1.c0000644000000000000000000001045512160065211014646 00000000000000/* * 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. */ /* test case: Check the following line in limits.conf: * soft nice 19 * hard nice -20 getrlimit should return soft=1 and hard=40. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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 ("!!"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh = NULL; const char *user="tstpamlimits"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; #ifdef RLIMIT_NICE retval = pam_start("tst-pam_limits1", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_limits1: pam_start returned %d\n", retval); return 1; } retval = pam_set_item (pamh, PAM_TTY, "/dev/tty1"); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_limits1: pam_set_item(PAM_TTY) returned %d\n", retval); return 1; } retval = pam_open_session (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_limits1: pam_open_session returned %d\n", retval); return 1; } struct rlimit rlim; getrlimit (RLIMIT_NICE, &rlim); if (rlim.rlim_cur != 1 && rlim.rlim_max != 40) { if (debug) fprintf (stderr, "pam_limits1: getrlimit failed, soft=%u, hard=%u\n", (unsigned int) rlim.rlim_cur, (unsigned int) rlim.rlim_max); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_limits1: pam_end returned %d\n", retval); return 1; } return 0; #else if (debug) fprintf (stderr, "pam_limits1: RLIMIT_NICE does not exist)\n"); return 77; #endif } Linux-PAM-1.1.8/xtests/group.conf0000644000000000000000000000006612160065211013453 00000000000000 tst-pam_group1;tty1;tstpamgrp;Al0000-2400;tstpamgrpg Linux-PAM-1.1.8/xtests/tst-pam_access4.pamd0000644000000000000000000000025512160065211015305 00000000000000#%PAM-1.0 auth required pam_access.so nodefgroup account required pam_permit.so password required pam_permit.so session required pam_permit.so Linux-PAM-1.1.8/xtests/run-xtests.sh0000755000000000000000000000345012160065211014143 00000000000000#!/bin/bash SRCDIR=$1 shift 1 [ -z "${SRCDIR}" ] && SRCDIR='.' if test `id -u` -ne 0 ; then echo "You need to be root to run the tests" exit 1 fi XTESTS="$@" failed=0 pass=0 skiped=0 all=0 mkdir -p /etc/security for config in access.conf group.conf time.conf limits.conf ; do cp /etc/security/$config /etc/security/$config-pam-xtests install -m 644 "${SRCDIR}"/$config /etc/security/$config done mv /etc/security/opasswd /etc/security/opasswd-pam-xtests for testname in $XTESTS ; do for cfg in "${SRCDIR}"/$testname*.pamd ; do install -m 644 $cfg /etc/pam.d/$(basename $cfg .pamd) done if test -f "${SRCDIR}"/$testname.sh ; then test -x "${SRCDIR}"/$testname.sh || chmod 755 "${SRCDIR}"/$testname.sh "${SRCDIR}"/$testname.sh > /dev/null else ./$testname > /dev/null fi RETVAL=$? if test $RETVAL -eq 77 ; then echo "SKIP: $testname" skiped=`expr $skiped + 1` elif test $RETVAL -ne 0 ; then echo "FAIL: $testname" failed=`expr $failed + 1` else echo "PASS: $testname" pass=`expr $pass + 1` fi all=`expr $all + 1` rm -f /etc/pam.d/$testname* done mv /etc/security/access.conf-pam-xtests /etc/security/access.conf mv /etc/security/group.conf-pam-xtests /etc/security/group.conf mv /etc/security/time.conf-pam-xtests /etc/security/time.conf mv /etc/security/limits.conf-pam-xtests /etc/security/limits.conf mv /etc/security/opasswd-pam-xtests /etc/security/opasswd if test "$failed" -ne 0; then echo "===================" echo "$failed of $all tests failed" echo "$skiped tests not run" echo "===================" exit 1 else echo "==================" echo "$all tests passed" echo "$skiped tests not run" echo "==================" fi exit 0 Linux-PAM-1.1.8/xtests/tst-pam_access3.pamd0000644000000000000000000000025512160065211015304 00000000000000#%PAM-1.0 auth required pam_access.so nodefgroup account required pam_permit.so password required pam_permit.so session required pam_permit.so Linux-PAM-1.1.8/xtests/tst-pam_authsucceed.pamd0000644000000000000000000000031612160065211016253 00000000000000#%PAM-1.0 # test that failed sufficient module cannot affect stack # with following successful required module auth sufficient pam_debug.so auth=auth_err auth required pam_debug.so auth=success Linux-PAM-1.1.8/xtests/Makefile.am0000644000000000000000000000422212160065211013502 00000000000000# # Copyright (c) 2006 Thorsten Kukuk # AM_CFLAGS = -DLIBPAM_COMPILE -I$(top_srcdir)/libpam/include \ -I$(top_srcdir)/libpamc/include -I$(top_srcdir)/libpam_misc/include LDADD = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la CLEANFILES = *~ $(XTESTS) EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \ tst-pam_dispatch3.pamd tst-pam_dispatch4.pamd \ tst-pam_dispatch5.pamd \ tst-pam_cracklib1.pamd tst-pam_cracklib2.pamd \ tst-pam_unix1.pamd tst-pam_unix2.pamd tst-pam_unix3.pamd \ tst-pam_unix4.pamd \ tst-pam_unix1.sh tst-pam_unix2.sh tst-pam_unix3.sh \ tst-pam_unix4.sh \ access.conf tst-pam_access1.pamd tst-pam_access1.sh \ tst-pam_access2.pamd tst-pam_access2.sh \ tst-pam_access3.pamd tst-pam_access3.sh \ tst-pam_access4.pamd tst-pam_access4.sh \ limits.conf tst-pam_limits1.pamd tst-pam_limits1.sh \ tst-pam_succeed_if1.pamd tst-pam_succeed_if1.sh \ group.conf tst-pam_group1.pamd tst-pam_group1.sh \ tst-pam_authfail.pamd tst-pam_authsucceed.pamd \ tst-pam_substack1.pamd tst-pam_substack1a.pamd tst-pam_substack1.sh \ tst-pam_substack2.pamd tst-pam_substack2a.pamd tst-pam_substack2.sh \ tst-pam_substack3.pamd tst-pam_substack3a.pamd tst-pam_substack3.sh \ tst-pam_substack4.pamd tst-pam_substack4a.pamd tst-pam_substack4.sh \ tst-pam_substack5.pamd tst-pam_substack5a.pamd tst-pam_substack5.sh \ tst-pam_assemble_line1.pamd tst-pam_assemble_line1.sh \ tst-pam_pwhistory1.pamd tst-pam_pwhistory1.sh \ tst-pam_time1.pamd time.conf XTESTS = tst-pam_dispatch1 tst-pam_dispatch2 tst-pam_dispatch3 \ tst-pam_dispatch4 tst-pam_dispatch5 \ tst-pam_cracklib1 tst-pam_cracklib2 \ tst-pam_unix1 tst-pam_unix2 tst-pam_unix3 tst-pam_unix4 \ tst-pam_access1 tst-pam_access2 tst-pam_access3 \ tst-pam_access4 tst-pam_limits1 tst-pam_succeed_if1 \ tst-pam_group1 tst-pam_authfail tst-pam_authsucceed \ tst-pam_pwhistory1 tst-pam_time1 NOSRCTESTS = tst-pam_substack1 tst-pam_substack2 tst-pam_substack3 \ tst-pam_substack4 tst-pam_substack5 tst-pam_assemble_line1 EXTRA_PROGRAMS = $(XTESTS) xtests: $(XTESTS) run-xtests.sh "$(srcdir)"/run-xtests.sh "$(srcdir)" ${XTESTS} ${NOSRCTESTS} Linux-PAM-1.1.8/xtests/time.conf0000644000000000000000000000005512160065211013253 00000000000000*;*;you|me;!Al0000-2400 *;*;x|y;!Al0000-2400 Linux-PAM-1.1.8/xtests/tst-pam_cracklib1.c0000644000000000000000000000770012160065211015116 00000000000000/* * 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. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { static int calls = 0; 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; /* first call get a password, second one NULL */ if (calls) reply[count].resp = NULL; else { ++calls; reply[count].resp = strdup ("Kindergarten"); } } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; /* Check that pam_cracklib does not seg.fault on empty passwords. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="root"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_cracklib1", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "cracklib1: pam_start returned %d\n", retval); return 1; } /* Try one, first input is correct, second is NULL */ retval = pam_chauthtok (pamh, 0); if (retval != PAM_AUTHTOK_ERR) { if (debug) fprintf (stderr, "cracklib1-1: pam_chauthtok returned %d\n", retval); return 1; } /* Try two, second input is NULL */ retval = pam_chauthtok (pamh, 0); if (retval != PAM_AUTHTOK_ERR) { if (debug) fprintf (stderr, "cracklib1-2: pam_chauthtok returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "cracklib1: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_unix1.pamd0000644000000000000000000000023212160065211015017 00000000000000#%PAM-1.0 auth required pam_unix.so account required pam_unix.so password required pam_unix.so session required pam_unix.so Linux-PAM-1.1.8/xtests/tst-pam_authfail.c0000644000000000000000000000551112160065211015056 00000000000000/* * 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. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static struct pam_conv conv = { misc_conv, NULL }; /* Check that auth stack fails. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="nobody"; const char *stack="tst-pam_authfail"; int retval; int debug = 0; if (argc > 2) { stack = argv[2]; } if (argc > 1) { if (strcmp (argv[1], "-d") == 0) debug = 1; else stack = argv[1]; } retval = pam_start(stack, user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test3: pam_start returned %d\n", retval); return 1; } retval = pam_authenticate(pamh, 0); if (retval == PAM_SUCCESS) { if (debug) fprintf (stderr, "test3: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end(pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test3: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_unix2.sh0000755000000000000000000000024512160065211014520 00000000000000#!/bin/bash # pamunix0 = 0aXKZztA.d1KY /usr/sbin/useradd -p 0aXKZztA.d1KY tstpamunix ./tst-pam_unix2 RET=$? /usr/sbin/userdel -r tstpamunix 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_limits1.pamd0000644000000000000000000000024212160065211015336 00000000000000#%PAM-1.0 auth required pam_permit.so account required pam_permit.so password required pam_permit.so session required pam_limits.so Linux-PAM-1.1.8/xtests/tst-pam_substack4.pamd0000644000000000000000000000023712160065211015663 00000000000000#%PAM-1.0 # Substack is counted as one module in jumps auth [success=1] pam_permit.so auth substack tst-pam_substack4a auth required pam_permit.so Linux-PAM-1.1.8/xtests/tst-pam_substack5.sh0000755000000000000000000000006712160065211015361 00000000000000#!/bin/bash exec ./tst-pam_authfail tst-pam_substack5 Linux-PAM-1.1.8/xtests/tst-pam_dispatch1.c0000644000000000000000000000567412160065211015153 00000000000000/* * 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. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static struct pam_conv conv = { misc_conv, NULL }; static int debug = 0; /* https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=196859 This stack should not return PAM_IGNORE to the application: auth [default=bad] pam_debug.so auth=ignore */ static int test1 (void) { pam_handle_t *pamh=NULL; const char *user="nobody"; int retval; retval = pam_start("tst-pam_dispatch1", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test1: pam_start returned %d\n", retval); return 1; } retval = pam_authenticate(pamh, 0); if (retval != PAM_PERM_DENIED) { if (debug) fprintf (stderr, "test1: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end(pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test1: pam_end returned %d\n", retval); return 1; } return 0; } int main(int argc, char *argv[]) { if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; if (test1 ()) return 1; return 0; } Linux-PAM-1.1.8/xtests/tst-pam_time1.c0000644000000000000000000000622512160065211014303 00000000000000/* * 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. */ /* test case: Check the following lines in time.conf: *;*;you|me;!Al0000-2400 *;*;x|y;!Al0000-2400 User 'x' should not be able to login. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include struct test_t { const char *user; int retval; }; static struct test_t tests[] = { {"xy", 0}, {"yx", 0}, {"you",6}, {"me", 6}, {"x", 6}, {"y", 6}, }; static int num_tests = sizeof (tests) / sizeof (struct test_t); static struct pam_conv conv = { NULL, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh = NULL; int retval; int debug = 0; int i; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; for (i = 0; i < num_tests; i++) { retval = pam_start("tst-pam_time1", tests[i].user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_time1: pam_start returned %d\n", retval); return 1; } retval = pam_acct_mgmt (pamh, 0); if (retval != tests[i].retval) { if (debug) fprintf (stderr, "pam_time1: pam_acct_mgmt(%s) returned wrong value, %d, expected %d\n", tests[i].user, retval, tests[i].retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_time1: pam_end returned %d\n", retval); return 1; } } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_unix4.sh0000755000000000000000000000063112160065211014521 00000000000000#!/bin/bash # pamunix01 = 0aXKZztA.d1KYIuFXArmd2jU /usr/sbin/useradd -p 0aXKZztA.d1KYIuFXArmd2jU tstpamunix # this run must successfully change the password ./tst-pam_unix4 pass RET=$? /usr/sbin/usermod -p 0aXKZztA.d1KYIuFXArmd2jU tstpamunix /usr/bin/chage -m 10000 tstpamunix # this run must fail to change the password ./tst-pam_unix4 fail || RET=$? /usr/sbin/userdel -r tstpamunix 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_dispatch1.pamd0000644000000000000000000000025012160065211015633 00000000000000# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=196859 # This stack should not return PAM_IGNORE to the application: auth [default=bad] pam_debug.so auth=ignore Linux-PAM-1.1.8/xtests/tst-pam_unix1.c0000644000000000000000000000725212160065211014331 00000000000000/* * 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. */ /* * Test case: '!!' as password should not allow login */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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 ("!!"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; /* Check that errors of optional modules are ignored and that required modules after a sufficient one are not executed. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="tstpamunix"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_unix1", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_unix1: pam_start returned %d\n", retval); return 1; } /* !! as password should not allow login */ retval = pam_authenticate (pamh, 0); if (retval != PAM_AUTH_ERR) { if (debug) fprintf (stderr, "pam_unix1: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_unix1: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_authfail.pamd0000644000000000000000000000031012160065211015545 00000000000000#%PAM-1.0 # test that successful sufficient module cannot affect stack # after failed required module auth required pam_debug.so auth=perm_denied auth sufficient pam_debug.so auth=success Linux-PAM-1.1.8/xtests/tst-pam_unix4.pamd0000644000000000000000000000024012160065211015021 00000000000000#%PAM-1.0 auth required pam_unix.so account required pam_unix.so password required pam_unix.so debug session required pam_unix.so Linux-PAM-1.1.8/xtests/tst-pam_substack5.pamd0000644000000000000000000000016212160065211015661 00000000000000#%PAM-1.0 # Requisite terminates substack auth required pam_permit.so auth substack tst-pam_substack5a Linux-PAM-1.1.8/xtests/tst-pam_substack5a.pamd0000644000000000000000000000014412160065211016022 00000000000000#%PAM-1.0 auth requisite pam_debug.so auth=auth_err auth [success=reset] pam_permit.so Linux-PAM-1.1.8/xtests/tst-pam_substack3a.pamd0000644000000000000000000000014312160065211016017 00000000000000#%PAM-1.0 auth required pam_debug.so auth=auth_err auth [success=reset] pam_permit.so Linux-PAM-1.1.8/xtests/access.conf0000644000000000000000000000010212160065211013547 00000000000000 -:ALL EXCEPT (tstpamaccess) tstpamaccess3 :LOCAL -:ALL:127.0.0.1 Linux-PAM-1.1.8/xtests/tst-pam_access3.c0000644000000000000000000000747212160065211014615 00000000000000/* * 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. */ /* test case: Check the following line in access.conf: -:ALL EXCEPT tstpamaccess3 :LOCAL pam_authenticate should pass for user tstpamaccess3 */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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 ("!!"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh = NULL; const char *user="tstpamaccess3"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_access3", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access3: pam_start returned %d\n", retval); return 1; } retval = pam_set_item (pamh, PAM_TTY, "/dev/tty1"); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access3: pam_set_item(PAM_TTY) returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access3: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access3: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_unix1.sh0000755000000000000000000000020012160065211014506 00000000000000#!/bin/bash /usr/sbin/useradd -p '!!' tstpamunix ./tst-pam_unix1 RET=$? /usr/sbin/userdel -r tstpamunix 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_access1.pamd0000644000000000000000000000025512160065211015302 00000000000000#%PAM-1.0 auth required pam_access.so nodefgroup account required pam_permit.so password required pam_permit.so session required pam_permit.so Linux-PAM-1.1.8/xtests/tst-pam_access1.sh0000755000000000000000000000034512160065211014776 00000000000000#!/bin/bash /usr/sbin/groupadd tstpamaccess /usr/sbin/useradd -G tstpamaccess -p '!!' tstpamaccess1 ./tst-pam_access1 RET=$? /usr/sbin/userdel -r tstpamaccess1 2> /dev/null /usr/sbin/groupdel tstpamaccess 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/Makefile.in0000644000000000000000000007310412216527540013532 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2006 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ EXTRA_PROGRAMS = $(am__EXEEXT_1) subdir = xtests DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = tst-pam_dispatch1$(EXEEXT) tst-pam_dispatch2$(EXEEXT) \ tst-pam_dispatch3$(EXEEXT) tst-pam_dispatch4$(EXEEXT) \ tst-pam_dispatch5$(EXEEXT) tst-pam_cracklib1$(EXEEXT) \ tst-pam_cracklib2$(EXEEXT) tst-pam_unix1$(EXEEXT) \ tst-pam_unix2$(EXEEXT) tst-pam_unix3$(EXEEXT) \ tst-pam_unix4$(EXEEXT) tst-pam_access1$(EXEEXT) \ tst-pam_access2$(EXEEXT) tst-pam_access3$(EXEEXT) \ tst-pam_access4$(EXEEXT) tst-pam_limits1$(EXEEXT) \ tst-pam_succeed_if1$(EXEEXT) tst-pam_group1$(EXEEXT) \ tst-pam_authfail$(EXEEXT) tst-pam_authsucceed$(EXEEXT) \ tst-pam_pwhistory1$(EXEEXT) tst-pam_time1$(EXEEXT) tst_pam_access1_SOURCES = tst-pam_access1.c tst_pam_access1_OBJECTS = tst-pam_access1.$(OBJEXT) tst_pam_access1_LDADD = $(LDADD) tst_pam_access1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_access2_SOURCES = tst-pam_access2.c tst_pam_access2_OBJECTS = tst-pam_access2.$(OBJEXT) tst_pam_access2_LDADD = $(LDADD) tst_pam_access2_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_access3_SOURCES = tst-pam_access3.c tst_pam_access3_OBJECTS = tst-pam_access3.$(OBJEXT) tst_pam_access3_LDADD = $(LDADD) tst_pam_access3_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_access4_SOURCES = tst-pam_access4.c tst_pam_access4_OBJECTS = tst-pam_access4.$(OBJEXT) tst_pam_access4_LDADD = $(LDADD) tst_pam_access4_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_authfail_SOURCES = tst-pam_authfail.c tst_pam_authfail_OBJECTS = tst-pam_authfail.$(OBJEXT) tst_pam_authfail_LDADD = $(LDADD) tst_pam_authfail_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_authsucceed_SOURCES = tst-pam_authsucceed.c tst_pam_authsucceed_OBJECTS = tst-pam_authsucceed.$(OBJEXT) tst_pam_authsucceed_LDADD = $(LDADD) tst_pam_authsucceed_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_cracklib1_SOURCES = tst-pam_cracklib1.c tst_pam_cracklib1_OBJECTS = tst-pam_cracklib1.$(OBJEXT) tst_pam_cracklib1_LDADD = $(LDADD) tst_pam_cracklib1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_cracklib2_SOURCES = tst-pam_cracklib2.c tst_pam_cracklib2_OBJECTS = tst-pam_cracklib2.$(OBJEXT) tst_pam_cracklib2_LDADD = $(LDADD) tst_pam_cracklib2_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_dispatch1_SOURCES = tst-pam_dispatch1.c tst_pam_dispatch1_OBJECTS = tst-pam_dispatch1.$(OBJEXT) tst_pam_dispatch1_LDADD = $(LDADD) tst_pam_dispatch1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_dispatch2_SOURCES = tst-pam_dispatch2.c tst_pam_dispatch2_OBJECTS = tst-pam_dispatch2.$(OBJEXT) tst_pam_dispatch2_LDADD = $(LDADD) tst_pam_dispatch2_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_dispatch3_SOURCES = tst-pam_dispatch3.c tst_pam_dispatch3_OBJECTS = tst-pam_dispatch3.$(OBJEXT) tst_pam_dispatch3_LDADD = $(LDADD) tst_pam_dispatch3_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_dispatch4_SOURCES = tst-pam_dispatch4.c tst_pam_dispatch4_OBJECTS = tst-pam_dispatch4.$(OBJEXT) tst_pam_dispatch4_LDADD = $(LDADD) tst_pam_dispatch4_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_dispatch5_SOURCES = tst-pam_dispatch5.c tst_pam_dispatch5_OBJECTS = tst-pam_dispatch5.$(OBJEXT) tst_pam_dispatch5_LDADD = $(LDADD) tst_pam_dispatch5_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_group1_SOURCES = tst-pam_group1.c tst_pam_group1_OBJECTS = tst-pam_group1.$(OBJEXT) tst_pam_group1_LDADD = $(LDADD) tst_pam_group1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_limits1_SOURCES = tst-pam_limits1.c tst_pam_limits1_OBJECTS = tst-pam_limits1.$(OBJEXT) tst_pam_limits1_LDADD = $(LDADD) tst_pam_limits1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_pwhistory1_SOURCES = tst-pam_pwhistory1.c tst_pam_pwhistory1_OBJECTS = tst-pam_pwhistory1.$(OBJEXT) tst_pam_pwhistory1_LDADD = $(LDADD) tst_pam_pwhistory1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_succeed_if1_SOURCES = tst-pam_succeed_if1.c tst_pam_succeed_if1_OBJECTS = tst-pam_succeed_if1.$(OBJEXT) tst_pam_succeed_if1_LDADD = $(LDADD) tst_pam_succeed_if1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_time1_SOURCES = tst-pam_time1.c tst_pam_time1_OBJECTS = tst-pam_time1.$(OBJEXT) tst_pam_time1_LDADD = $(LDADD) tst_pam_time1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_unix1_SOURCES = tst-pam_unix1.c tst_pam_unix1_OBJECTS = tst-pam_unix1.$(OBJEXT) tst_pam_unix1_LDADD = $(LDADD) tst_pam_unix1_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_unix2_SOURCES = tst-pam_unix2.c tst_pam_unix2_OBJECTS = tst-pam_unix2.$(OBJEXT) tst_pam_unix2_LDADD = $(LDADD) tst_pam_unix2_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_unix3_SOURCES = tst-pam_unix3.c tst_pam_unix3_OBJECTS = tst-pam_unix3.$(OBJEXT) tst_pam_unix3_LDADD = $(LDADD) tst_pam_unix3_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la tst_pam_unix4_SOURCES = tst-pam_unix4.c tst_pam_unix4_OBJECTS = tst-pam_unix4.$(OBJEXT) tst_pam_unix4_LDADD = $(LDADD) tst_pam_unix4_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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 = tst-pam_access1.c tst-pam_access2.c tst-pam_access3.c \ tst-pam_access4.c tst-pam_authfail.c tst-pam_authsucceed.c \ tst-pam_cracklib1.c tst-pam_cracklib2.c tst-pam_dispatch1.c \ tst-pam_dispatch2.c tst-pam_dispatch3.c tst-pam_dispatch4.c \ tst-pam_dispatch5.c tst-pam_group1.c tst-pam_limits1.c \ tst-pam_pwhistory1.c tst-pam_succeed_if1.c tst-pam_time1.c \ tst-pam_unix1.c tst-pam_unix2.c tst-pam_unix3.c \ tst-pam_unix4.c DIST_SOURCES = tst-pam_access1.c tst-pam_access2.c tst-pam_access3.c \ tst-pam_access4.c tst-pam_authfail.c tst-pam_authsucceed.c \ tst-pam_cracklib1.c tst-pam_cracklib2.c tst-pam_dispatch1.c \ tst-pam_dispatch2.c tst-pam_dispatch3.c tst-pam_dispatch4.c \ tst-pam_dispatch5.c tst-pam_group1.c tst-pam_limits1.c \ tst-pam_pwhistory1.c tst-pam_succeed_if1.c tst-pam_time1.c \ tst-pam_unix1.c tst-pam_unix2.c tst-pam_unix3.c \ tst-pam_unix4.c ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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@ AM_CFLAGS = -DLIBPAM_COMPILE -I$(top_srcdir)/libpam/include \ -I$(top_srcdir)/libpamc/include -I$(top_srcdir)/libpam_misc/include LDADD = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la CLEANFILES = *~ $(XTESTS) EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \ tst-pam_dispatch3.pamd tst-pam_dispatch4.pamd \ tst-pam_dispatch5.pamd \ tst-pam_cracklib1.pamd tst-pam_cracklib2.pamd \ tst-pam_unix1.pamd tst-pam_unix2.pamd tst-pam_unix3.pamd \ tst-pam_unix4.pamd \ tst-pam_unix1.sh tst-pam_unix2.sh tst-pam_unix3.sh \ tst-pam_unix4.sh \ access.conf tst-pam_access1.pamd tst-pam_access1.sh \ tst-pam_access2.pamd tst-pam_access2.sh \ tst-pam_access3.pamd tst-pam_access3.sh \ tst-pam_access4.pamd tst-pam_access4.sh \ limits.conf tst-pam_limits1.pamd tst-pam_limits1.sh \ tst-pam_succeed_if1.pamd tst-pam_succeed_if1.sh \ group.conf tst-pam_group1.pamd tst-pam_group1.sh \ tst-pam_authfail.pamd tst-pam_authsucceed.pamd \ tst-pam_substack1.pamd tst-pam_substack1a.pamd tst-pam_substack1.sh \ tst-pam_substack2.pamd tst-pam_substack2a.pamd tst-pam_substack2.sh \ tst-pam_substack3.pamd tst-pam_substack3a.pamd tst-pam_substack3.sh \ tst-pam_substack4.pamd tst-pam_substack4a.pamd tst-pam_substack4.sh \ tst-pam_substack5.pamd tst-pam_substack5a.pamd tst-pam_substack5.sh \ tst-pam_assemble_line1.pamd tst-pam_assemble_line1.sh \ tst-pam_pwhistory1.pamd tst-pam_pwhistory1.sh \ tst-pam_time1.pamd time.conf XTESTS = tst-pam_dispatch1 tst-pam_dispatch2 tst-pam_dispatch3 \ tst-pam_dispatch4 tst-pam_dispatch5 \ tst-pam_cracklib1 tst-pam_cracklib2 \ tst-pam_unix1 tst-pam_unix2 tst-pam_unix3 tst-pam_unix4 \ tst-pam_access1 tst-pam_access2 tst-pam_access3 \ tst-pam_access4 tst-pam_limits1 tst-pam_succeed_if1 \ tst-pam_group1 tst-pam_authfail tst-pam_authsucceed \ tst-pam_pwhistory1 tst-pam_time1 NOSRCTESTS = tst-pam_substack1 tst-pam_substack2 tst-pam_substack3 \ tst-pam_substack4 tst-pam_substack5 tst-pam_assemble_line1 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu xtests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu xtests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tst-pam_access1$(EXEEXT): $(tst_pam_access1_OBJECTS) $(tst_pam_access1_DEPENDENCIES) @rm -f tst-pam_access1$(EXEEXT) $(LINK) $(tst_pam_access1_OBJECTS) $(tst_pam_access1_LDADD) $(LIBS) tst-pam_access2$(EXEEXT): $(tst_pam_access2_OBJECTS) $(tst_pam_access2_DEPENDENCIES) @rm -f tst-pam_access2$(EXEEXT) $(LINK) $(tst_pam_access2_OBJECTS) $(tst_pam_access2_LDADD) $(LIBS) tst-pam_access3$(EXEEXT): $(tst_pam_access3_OBJECTS) $(tst_pam_access3_DEPENDENCIES) @rm -f tst-pam_access3$(EXEEXT) $(LINK) $(tst_pam_access3_OBJECTS) $(tst_pam_access3_LDADD) $(LIBS) tst-pam_access4$(EXEEXT): $(tst_pam_access4_OBJECTS) $(tst_pam_access4_DEPENDENCIES) @rm -f tst-pam_access4$(EXEEXT) $(LINK) $(tst_pam_access4_OBJECTS) $(tst_pam_access4_LDADD) $(LIBS) tst-pam_authfail$(EXEEXT): $(tst_pam_authfail_OBJECTS) $(tst_pam_authfail_DEPENDENCIES) @rm -f tst-pam_authfail$(EXEEXT) $(LINK) $(tst_pam_authfail_OBJECTS) $(tst_pam_authfail_LDADD) $(LIBS) tst-pam_authsucceed$(EXEEXT): $(tst_pam_authsucceed_OBJECTS) $(tst_pam_authsucceed_DEPENDENCIES) @rm -f tst-pam_authsucceed$(EXEEXT) $(LINK) $(tst_pam_authsucceed_OBJECTS) $(tst_pam_authsucceed_LDADD) $(LIBS) tst-pam_cracklib1$(EXEEXT): $(tst_pam_cracklib1_OBJECTS) $(tst_pam_cracklib1_DEPENDENCIES) @rm -f tst-pam_cracklib1$(EXEEXT) $(LINK) $(tst_pam_cracklib1_OBJECTS) $(tst_pam_cracklib1_LDADD) $(LIBS) tst-pam_cracklib2$(EXEEXT): $(tst_pam_cracklib2_OBJECTS) $(tst_pam_cracklib2_DEPENDENCIES) @rm -f tst-pam_cracklib2$(EXEEXT) $(LINK) $(tst_pam_cracklib2_OBJECTS) $(tst_pam_cracklib2_LDADD) $(LIBS) tst-pam_dispatch1$(EXEEXT): $(tst_pam_dispatch1_OBJECTS) $(tst_pam_dispatch1_DEPENDENCIES) @rm -f tst-pam_dispatch1$(EXEEXT) $(LINK) $(tst_pam_dispatch1_OBJECTS) $(tst_pam_dispatch1_LDADD) $(LIBS) tst-pam_dispatch2$(EXEEXT): $(tst_pam_dispatch2_OBJECTS) $(tst_pam_dispatch2_DEPENDENCIES) @rm -f tst-pam_dispatch2$(EXEEXT) $(LINK) $(tst_pam_dispatch2_OBJECTS) $(tst_pam_dispatch2_LDADD) $(LIBS) tst-pam_dispatch3$(EXEEXT): $(tst_pam_dispatch3_OBJECTS) $(tst_pam_dispatch3_DEPENDENCIES) @rm -f tst-pam_dispatch3$(EXEEXT) $(LINK) $(tst_pam_dispatch3_OBJECTS) $(tst_pam_dispatch3_LDADD) $(LIBS) tst-pam_dispatch4$(EXEEXT): $(tst_pam_dispatch4_OBJECTS) $(tst_pam_dispatch4_DEPENDENCIES) @rm -f tst-pam_dispatch4$(EXEEXT) $(LINK) $(tst_pam_dispatch4_OBJECTS) $(tst_pam_dispatch4_LDADD) $(LIBS) tst-pam_dispatch5$(EXEEXT): $(tst_pam_dispatch5_OBJECTS) $(tst_pam_dispatch5_DEPENDENCIES) @rm -f tst-pam_dispatch5$(EXEEXT) $(LINK) $(tst_pam_dispatch5_OBJECTS) $(tst_pam_dispatch5_LDADD) $(LIBS) tst-pam_group1$(EXEEXT): $(tst_pam_group1_OBJECTS) $(tst_pam_group1_DEPENDENCIES) @rm -f tst-pam_group1$(EXEEXT) $(LINK) $(tst_pam_group1_OBJECTS) $(tst_pam_group1_LDADD) $(LIBS) tst-pam_limits1$(EXEEXT): $(tst_pam_limits1_OBJECTS) $(tst_pam_limits1_DEPENDENCIES) @rm -f tst-pam_limits1$(EXEEXT) $(LINK) $(tst_pam_limits1_OBJECTS) $(tst_pam_limits1_LDADD) $(LIBS) tst-pam_pwhistory1$(EXEEXT): $(tst_pam_pwhistory1_OBJECTS) $(tst_pam_pwhistory1_DEPENDENCIES) @rm -f tst-pam_pwhistory1$(EXEEXT) $(LINK) $(tst_pam_pwhistory1_OBJECTS) $(tst_pam_pwhistory1_LDADD) $(LIBS) tst-pam_succeed_if1$(EXEEXT): $(tst_pam_succeed_if1_OBJECTS) $(tst_pam_succeed_if1_DEPENDENCIES) @rm -f tst-pam_succeed_if1$(EXEEXT) $(LINK) $(tst_pam_succeed_if1_OBJECTS) $(tst_pam_succeed_if1_LDADD) $(LIBS) tst-pam_time1$(EXEEXT): $(tst_pam_time1_OBJECTS) $(tst_pam_time1_DEPENDENCIES) @rm -f tst-pam_time1$(EXEEXT) $(LINK) $(tst_pam_time1_OBJECTS) $(tst_pam_time1_LDADD) $(LIBS) tst-pam_unix1$(EXEEXT): $(tst_pam_unix1_OBJECTS) $(tst_pam_unix1_DEPENDENCIES) @rm -f tst-pam_unix1$(EXEEXT) $(LINK) $(tst_pam_unix1_OBJECTS) $(tst_pam_unix1_LDADD) $(LIBS) tst-pam_unix2$(EXEEXT): $(tst_pam_unix2_OBJECTS) $(tst_pam_unix2_DEPENDENCIES) @rm -f tst-pam_unix2$(EXEEXT) $(LINK) $(tst_pam_unix2_OBJECTS) $(tst_pam_unix2_LDADD) $(LIBS) tst-pam_unix3$(EXEEXT): $(tst_pam_unix3_OBJECTS) $(tst_pam_unix3_DEPENDENCIES) @rm -f tst-pam_unix3$(EXEEXT) $(LINK) $(tst_pam_unix3_OBJECTS) $(tst_pam_unix3_LDADD) $(LIBS) tst-pam_unix4$(EXEEXT): $(tst_pam_unix4_OBJECTS) $(tst_pam_unix4_DEPENDENCIES) @rm -f tst-pam_unix4$(EXEEXT) $(LINK) $(tst_pam_unix4_OBJECTS) $(tst_pam_unix4_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_access1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_access2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_access3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_access4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_authfail.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_authsucceed.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_cracklib1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_cracklib2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_dispatch1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_dispatch2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_dispatch3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_dispatch4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_dispatch5.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_group1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_limits1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_pwhistory1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_succeed_if1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_time1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_unix1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_unix2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_unix3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-pam_unix4.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool 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 xtests: $(XTESTS) run-xtests.sh "$(srcdir)"/run-xtests.sh "$(srcdir)" ${XTESTS} ${NOSRCTESTS} # 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: Linux-PAM-1.1.8/xtests/tst-pam_authsucceed.c0000644000000000000000000000551712160065211015564 00000000000000/* * 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. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static struct pam_conv conv = { misc_conv, NULL }; /* Check that auth stack succeeds. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="nobody"; const char *stack="tst-pam_authsucceed"; int retval; int debug = 0; if (argc > 2) { stack = argv[2]; } if (argc > 1) { if (strcmp (argv[1], "-d") == 0) debug = 1; else stack = argv[1]; } retval = pam_start(stack, user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test3: pam_start returned %d\n", retval); return 1; } retval = pam_authenticate(pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test3: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end(pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "test3: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/limits.conf0000644000000000000000000000004312160065211013613 00000000000000* soft nice 19 * hard nice -20 Linux-PAM-1.1.8/xtests/tst-pam_access4.c0000644000000000000000000001143012160065211014603 00000000000000/* * 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. */ /* test case: Check the following lines in access.conf: -:ALL EXCEPT tstpamaccess3 :LOCAL -:ALL:127.0.0.1 pam_authenticate should fail for /dev/tty1, pass for www.example.com, and fail again for localhost */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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 ("!!"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh = NULL; const char *user="tstpamaccess4"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_access4", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access4: pam_start returned %d\n", retval); return 1; } retval = pam_set_item (pamh, PAM_TTY, "/dev/tty1"); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access4-1: pam_set_item(PAM_TTY) returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_PERM_DENIED) { if (debug) fprintf (stderr, "pam_access4-1: pam_authenticate returned %d\n", retval); return 1; } retval = pam_set_item (pamh, PAM_RHOST, "www.example.com"); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access4-2: pam_set_item(PAM_RHOST) returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access4-2: pam_authenticate returned %d\n", retval); return 1; } retval = pam_set_item (pamh, PAM_RHOST, "localhost"); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access4-3: pam_set_item(PAM_RHOST) returned %d\n", retval); return 1; } retval = pam_authenticate (pamh, 0); if (retval != PAM_PERM_DENIED) { if (debug) fprintf (stderr, "pam_access4-3: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "pam_access4: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_dispatch2.pamd0000644000000000000000000000025012160065211015634 00000000000000# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=196859 # This stack should not return PAM_IGNORE to the application: auth [default=die] pam_debug.so auth=ignore Linux-PAM-1.1.8/xtests/tst-pam_dispatch5.pamd0000644000000000000000000000016112160065211015640 00000000000000#%PAM-1.0 # Jump after the end of the stack auth [success=2 default=bad] pam_permit.so auth required pam_deny.so Linux-PAM-1.1.8/xtests/tst-pam_cracklib2.c0000644000000000000000000001030312160065211015110 00000000000000/* * 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. */ /* This test case checks Patch 1688777: pam_cracklib support for minimum character classes */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include int debug = 0; /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm, struct pam_response **response, void *appdata_ptr UNUSED) { static int calls = 0; 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) { if (debug) fprintf(stderr,"Query: %s\n", (*msgm)[count].msg); reply[count].resp_retcode = 0; /* first tow calls get a correct password, second a too easy one. */ if (calls > 1) reply[count].resp = strdup ("too easy"); else { ++calls; reply[count].resp = strdup ("1a9C*8dK"); } if (debug) fprintf(stderr,"Response: %s\n", reply[count].resp); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="root"; int retval; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_cracklib2", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "cracklib2: pam_start returned %d\n", retval); return 1; } /* Try one, first input is correct */ retval = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "cracklib2-1: pam_chauthtok returned %d\n", retval); return 1; } /* Try two, second input is wrong */ retval = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK); if (retval != PAM_AUTHTOK_ERR) { if (debug) fprintf (stderr, "cracklib2-2: pam_chauthtok returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "cracklib2: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/xtests/tst-pam_access3.sh0000755000000000000000000000021012160065211014767 00000000000000#!/bin/bash /usr/sbin/useradd -p '!!' tstpamaccess3 ./tst-pam_access3 RET=$? /usr/sbin/userdel -r tstpamaccess3 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_substack4a.pamd0000644000000000000000000000024012160065211016016 00000000000000#%PAM-1.0 auth required pam_debug.so auth=auth_err auth required pam_debug.so auth=auth_err auth required pam_debug.so auth=auth_err Linux-PAM-1.1.8/xtests/tst-pam_substack2a.pamd0000644000000000000000000000007412160065211016021 00000000000000#%PAM-1.0 auth requisite pam_debug.so auth=auth_err Linux-PAM-1.1.8/xtests/tst-pam_succeed_if1.sh0000755000000000000000000000032212160065211015621 00000000000000#!/bin/bash /usr/sbin/useradd -p '!!' tstpamtest /usr/sbin/useradd -p '!!' pamtest ./tst-pam_succeed_if1 RET=$? /usr/sbin/userdel -r tstpamtest 2> /dev/null /usr/sbin/userdel -r pamtest 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_succeed_if1.pamd0000644000000000000000000000010512160065211016124 00000000000000#%PAM-1.0 auth required pam_succeed_if.so user in tstpamtest:pamtest Linux-PAM-1.1.8/xtests/tst-pam_dispatch4.pamd0000644000000000000000000000056312160065211015645 00000000000000#%PAM-1.0 # We jump to end of the stack with previous pam_permit.so, should pass auth required pam_permit.so auth [success=1 default=ignore] pam_debug.so auth=success auth required pam_deny.so # We jump to end of the stack without any module in OK state, should fail account [success=1 default=ignore] pam_debug.so account=success account required pam_deny.so Linux-PAM-1.1.8/xtests/tst-pam_unix2.pamd0000644000000000000000000000023212160065211015020 00000000000000#%PAM-1.0 auth required pam_unix.so account required pam_unix.so password required pam_unix.so session required pam_unix.so Linux-PAM-1.1.8/xtests/tst-pam_cracklib1.pamd0000644000000000000000000000005412160065211015610 00000000000000#%PAM-1.0 password required pam_cracklib.so Linux-PAM-1.1.8/xtests/tst-pam_substack1.pamd0000644000000000000000000000026112160065211015655 00000000000000#%PAM-1.0 # Even if the substack succeeds with sufficient # the whole stack should fail. auth substack tst-pam_substack1a auth required pam_debug.so auth=auth_err Linux-PAM-1.1.8/xtests/tst-pam_unix3.sh0000755000000000000000000000027312160065211014522 00000000000000#!/bin/bash # pamunix01 = 0aXKZztA.d1KYIuFXArmd2jU /usr/sbin/useradd -p 0aXKZztA.d1KYIuFXArmd2jU tstpamunix ./tst-pam_unix3 RET=$? /usr/sbin/userdel -r tstpamunix 2> /dev/null exit $RET Linux-PAM-1.1.8/xtests/tst-pam_assemble_line1.pamd0000644000000000000000000000423512160065211016645 00000000000000#%PAM-1.0 # Test that _pam_assemble_line() does not crash with long lines. # printf '%511s\\\n%511s\\\n%511s\\\n%511s\\\n' \ \ \ \ auth required pam_deny.so Linux-PAM-1.1.8/xtests/tst-pam_access2.pamd0000644000000000000000000000025512160065211015303 00000000000000#%PAM-1.0 auth required pam_access.so nodefgroup account required pam_permit.so password required pam_permit.so session required pam_permit.so Linux-PAM-1.1.8/xtests/tst-pam_group1.pamd0000644000000000000000000000027612160065211015200 00000000000000#%PAM-1.0 auth required pam_group.so auth required pam_permit.so account required pam_permit.so password required pam_permit.so session required pam_permit.so Linux-PAM-1.1.8/xtests/tst-pam_unix2.c0000644000000000000000000001074412160065211014332 00000000000000/* * 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. */ /* * Check crypt handling * First use exact password, 8 characters (13 characters crypt) * Second use longer password, 9 characters */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include static int in_test; /* A conversation function which uses an internally-stored value for the responses. */ static int fake_conv (int num_msg, const struct pam_message **msgm UNUSED, struct pam_response **response, void *appdata_ptr UNUSED) { 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; /* first call get a password, second one a too long one */ if (in_test == 1) reply[count].resp = strdup ("pamunix0"); else if (in_test == 2) reply[count].resp = strdup ("pamunix01"); else reply[count].resp = strdup ("pamunix1"); } /* Set the pointers in the response structure and return. */ *response = reply; return PAM_SUCCESS; } static struct pam_conv conv = { fake_conv, NULL }; /* Check that errors of optional modules are ignored and that required modules after a sufficient one are not executed. */ int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; const char *user="tstpamunix"; int retval; int debug = 0; if (argc > 1 && strcmp (argv[1], "-d") == 0) debug = 1; retval = pam_start("tst-pam_unix2", user, &conv, &pamh); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "unix2: pam_start returned %d\n", retval); return 1; } /* Try one, first input is correct, second is NULL */ in_test = 1; retval = pam_authenticate (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "unix2-1: pam_authenticate returned %d\n", retval); return 1; } /* Try two, second input is too long */ in_test = 2; retval = pam_authenticate (pamh, 0); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "unix2-2: pam_authenticate returned %d\n", retval); return 1; } /* Third try, third input is wrong */ in_test = 3; retval = pam_authenticate (pamh, 0); if (retval != PAM_AUTH_ERR) { if (debug) fprintf (stderr, "unix2-3: pam_authenticate returned %d\n", retval); return 1; } retval = pam_end (pamh,retval); if (retval != PAM_SUCCESS) { if (debug) fprintf (stderr, "unix2: pam_end returned %d\n", retval); return 1; } return 0; } Linux-PAM-1.1.8/modules/0000755000000000000000000000000012216542310011646 500000000000000Linux-PAM-1.1.8/modules/pam_deny/0000755000000000000000000000000012216542310013442 500000000000000Linux-PAM-1.1.8/modules/pam_deny/pam_deny.8.xml0000644000000000000000000000705412160065211016052 00000000000000 pam_deny 8 Linux-PAM Manual pam_deny The locking-out PAM module pam_deny.so DESCRIPTION This module can be used to deny access. It always indicates a failure to the application through the PAM framework. It might be suitable for using for default (the OTHER) entries. OPTIONS This module does not recognise any options. MODULE TYPES PROVIDED All module types (, , and ) are provided. RETURN VALUES PAM_AUTH_ERR This is returned by the account and auth services. PAM_CRED_ERR This is returned by the setcred function. PAM_AUTHTOK_ERR This is returned by the password service. PAM_SESSION_ERR This is returned by the session service. EXAMPLES #%PAM-1.0 # # If we don't have config entries for a service, the # OTHER entries are used. To be secure, warn and deny # access to everything. other auth required pam_warn.so other auth required pam_deny.so other account required pam_warn.so other account required pam_deny.so other password required pam_warn.so other password required pam_deny.so other session required pam_warn.so other session required pam_deny.so SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_deny was written by Andrew G. Morgan <morgan@kernel.org> Linux-PAM-1.1.8/modules/pam_deny/pam_deny.80000644000000000000000000000535212216527572015271 00000000000000'\" t .\" Title: pam_deny .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_DENY" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_deny \- The locking\-out PAM module .SH "SYNOPSIS" .HP \w'\fBpam_deny\&.so\fR\ 'u \fBpam_deny\&.so\fR .SH "DESCRIPTION" .PP This module can be used to deny access\&. It always indicates a failure to the application through the PAM framework\&. It might be suitable for using for default (the \fIOTHER\fR) entries\&. .SH "OPTIONS" .PP This module does not recognise any options\&. .SH "MODULE TYPES PROVIDED" .PP All module types (\fBaccount\fR, \fBauth\fR, \fBpassword\fR and \fBsession\fR) are provided\&. .SH "RETURN VALUES" .PP .PP PAM_AUTH_ERR .RS 4 This is returned by the account and auth services\&. .RE .PP PAM_CRED_ERR .RS 4 This is returned by the setcred function\&. .RE .PP PAM_AUTHTOK_ERR .RS 4 This is returned by the password service\&. .RE .PP PAM_SESSION_ERR .RS 4 This is returned by the session service\&. .RE .SH "EXAMPLES" .sp .if n \{\ .RS 4 .\} .nf #%PAM\-1\&.0 # # If we don\*(Aqt have config entries for a service, the # OTHER entries are used\&. To be secure, warn and deny # access to everything\&. other auth required pam_warn\&.so other auth required pam_deny\&.so other account required pam_warn\&.so other account required pam_deny\&.so other password required pam_warn\&.so other password required pam_deny\&.so other session required pam_warn\&.so other session required pam_deny\&.so .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_deny was written by Andrew G\&. Morgan Linux-PAM-1.1.8/modules/pam_deny/tst-pam_deny0000755000000000000000000000006312160065211015711 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_deny.so Linux-PAM-1.1.8/modules/pam_deny/Makefile.am0000644000000000000000000000132612160065211015416 00000000000000# # Copyright (c) 2005, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_deny man_MANS = pam_deny.8 XMLS = README.xml pam_deny.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_deny.la pam_deny_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_deny.8.xml -include $(top_srcdir)/Make.xml.rules endif TESTS = tst-pam_deny Linux-PAM-1.1.8/modules/pam_deny/README0000644000000000000000000000201312216527572014253 00000000000000pam_deny — The locking-out PAM module ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION This module can be used to deny access. It always indicates a failure to the application through the PAM framework. It might be suitable for using for default (the OTHER) entries. EXAMPLES #%PAM-1.0 # # If we don't have config entries for a service, the # OTHER entries are used. To be secure, warn and deny # access to everything. other auth required pam_warn.so other auth required pam_deny.so other account required pam_warn.so other account required pam_deny.so other password required pam_warn.so other password required pam_deny.so other session required pam_warn.so other session required pam_deny.so AUTHOR pam_deny was written by Andrew G. Morgan Linux-PAM-1.1.8/modules/pam_deny/Makefile.in0000644000000000000000000006003712216527535015451 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_deny DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_deny_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_deny_la_SOURCES = pam_deny.c pam_deny_la_OBJECTS = pam_deny.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_deny.c DIST_SOURCES = pam_deny.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_deny man_MANS = pam_deny.8 XMLS = README.xml pam_deny.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_deny.la pam_deny_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README TESTS = tst-pam_deny all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_deny/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_deny/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_deny.la: $(pam_deny_la_OBJECTS) $(pam_deny_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_deny_la_OBJECTS) $(pam_deny_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_deny.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_deny.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_deny/README.xml0000644000000000000000000000171012160065211015036 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_deny.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_deny-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_deny/pam_deny.c0000644000000000000000000000357712160065211015334 00000000000000/* pam_deny module */ /* * $Id$ * * Written by Andrew Morgan 1996/3/11 * */ /* * here, we make definitions for the externally accessible functions * in this file (these definitions are required for static modules * but strongly encouraged generally) they are used to instruct the * modules include file to define their prototypes. */ #include "config.h" #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #define PAM_SM_SESSION #define PAM_SM_PASSWORD #include /* --- authentication management functions --- */ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_AUTH_ERR; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_CRED_ERR; } /* --- account management functions --- */ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_AUTH_ERR; } /* --- password management --- */ PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_AUTHTOK_ERR; } /* --- session management --- */ PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SESSION_ERR; } PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SESSION_ERR; } /* end of module definition */ /* static module data */ #ifdef PAM_STATIC struct pam_module _pam_deny_modstruct = { "pam_deny", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, pam_sm_chauthtok }; #endif Linux-PAM-1.1.8/modules/pam_securetty/0000755000000000000000000000000012216542312014534 500000000000000Linux-PAM-1.1.8/modules/pam_securetty/tst-pam_securetty0000755000000000000000000000007012160065211020067 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_securetty.so Linux-PAM-1.1.8/modules/pam_securetty/pam_securetty.c0000644000000000000000000001641312160065211017505 00000000000000/* pam_securetty module */ #define SECURETTY_FILE "/etc/securetty" #define TTY_PREFIX "/dev/" #define CMDLINE_FILE "/proc/cmdline" #define CONSOLEACTIVE_FILE "/sys/class/tty/console/active" /* * by Elliot Lee , Red Hat Software. * July 25, 1996. * This code shamelessly ripped from the pam_rootok module. * Slight modifications AGM. 1996/12/3 */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #include #include #include #define PAM_DEBUG_ARG 0x0001 #define PAM_NOCONSOLE_ARG 0x0002 static int _pam_parse (const pam_handle_t *pamh, int argc, const char **argv) { int ctrl=0; /* step through arguments */ for (ctrl=0; argc-- > 0; ++argv) { /* generic options */ if (!strcmp(*argv,"debug")) ctrl |= PAM_DEBUG_ARG; else if (!strcmp(*argv, "noconsole")) ctrl |= PAM_NOCONSOLE_ARG; else { pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } } return ctrl; } static int securetty_perform_check (pam_handle_t *pamh, int ctrl, const char *function_name) { int retval = PAM_AUTH_ERR; const char *username; const char *uttyname; const void *void_uttyname; char ttyfileline[256]; char ptname[256]; struct stat ttyfileinfo; struct passwd *user_pwd; FILE *ttyfile; /* log a trail for debugging */ if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "pam_securetty called via %s function", function_name); } retval = pam_get_user(pamh, &username, NULL); if (retval != PAM_SUCCESS || username == NULL) { pam_syslog(pamh, LOG_WARNING, "cannot determine username"); return (retval == PAM_CONV_AGAIN ? PAM_INCOMPLETE:PAM_SERVICE_ERR); } user_pwd = pam_modutil_getpwnam(pamh, username); if (user_pwd != NULL && user_pwd->pw_uid != 0) { /* If the user is not root, securetty's does not apply to them */ return PAM_SUCCESS; } /* The user is now either root or an invalid / mistyped username */ retval = pam_get_item(pamh, PAM_TTY, &void_uttyname); uttyname = void_uttyname; if (retval != PAM_SUCCESS || uttyname == NULL) { pam_syslog (pamh, LOG_WARNING, "cannot determine user's tty"); return PAM_SERVICE_ERR; } /* The PAM_TTY item may be prefixed with "/dev/" - skip that */ if (strncmp(TTY_PREFIX, uttyname, sizeof(TTY_PREFIX)-1) == 0) { uttyname += sizeof(TTY_PREFIX)-1; } if (stat(SECURETTY_FILE, &ttyfileinfo)) { pam_syslog(pamh, LOG_NOTICE, "Couldn't open %s: %m", SECURETTY_FILE); return PAM_SUCCESS; /* for compatibility with old securetty handling, this needs to succeed. But we still log the error. */ } if ((ttyfileinfo.st_mode & S_IWOTH) || !S_ISREG(ttyfileinfo.st_mode)) { /* If the file is world writable or is not a normal file, return error */ pam_syslog(pamh, LOG_ERR, "%s is either world writable or not a normal file", SECURETTY_FILE); return PAM_AUTH_ERR; } ttyfile = fopen(SECURETTY_FILE,"r"); if (ttyfile == NULL) { /* Check that we opened it successfully */ pam_syslog(pamh, LOG_ERR, "Error opening %s: %m", SECURETTY_FILE); return PAM_SERVICE_ERR; } if (isdigit(uttyname[0])) { snprintf(ptname, sizeof(ptname), "pts/%s", uttyname); } else { ptname[0] = '\0'; } retval = 1; while ((fgets(ttyfileline, sizeof(ttyfileline)-1, ttyfile) != NULL) && retval) { if (ttyfileline[strlen(ttyfileline) - 1] == '\n') ttyfileline[strlen(ttyfileline) - 1] = '\0'; retval = ( strcmp(ttyfileline, uttyname) && (!ptname[0] || strcmp(ptname, uttyname)) ); } fclose(ttyfile); if (retval && !(ctrl & PAM_NOCONSOLE_ARG)) { FILE *cmdlinefile; /* Allow access from the kernel console, if enabled */ cmdlinefile = fopen(CMDLINE_FILE, "r"); if (cmdlinefile != NULL) { char line[LINE_MAX], *p; line[0] = 0; fgets(line, sizeof(line), cmdlinefile); fclose(cmdlinefile); for (p = line; p; p = strstr(p+1, "console=")) { char *e; /* Test whether this is a beginning of a word? */ if (p > line && p[-1] != ' ') continue; /* Is this our console? */ if (strncmp(p + 8, uttyname, strlen(uttyname))) continue; /* Is there any garbage after the TTY name? */ e = p + 8 + strlen(uttyname); if (*e == ',' || *e == ' ' || *e == '\n' || *e == 0) { retval = 0; break; } } } } if (retval && !(ctrl & PAM_NOCONSOLE_ARG)) { FILE *consoleactivefile; /* Allow access from the active console */ consoleactivefile = fopen(CONSOLEACTIVE_FILE, "r"); if (consoleactivefile != NULL) { char line[LINE_MAX], *p, *n; line[0] = 0; p = fgets(line, sizeof(line), consoleactivefile); fclose(consoleactivefile); if (p) { /* remove the newline character at end */ if (line[strlen(line)-1] == '\n') line[strlen(line)-1] = 0; for (n = p; n != NULL; p = n+1) { if ((n = strchr(p, ' ')) != NULL) *n = '\0'; if (strcmp(p, uttyname) == 0) { retval = 0; break; } } } } } if (retval) { pam_syslog(pamh, LOG_WARNING, "access denied: tty '%s' is not secure !", uttyname); retval = PAM_AUTH_ERR; if (user_pwd == NULL) { retval = PAM_USER_UNKNOWN; } } else { if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "access allowed for '%s' on '%s'", username, uttyname); } retval = PAM_SUCCESS; } return retval; } /* --- authentication management functions --- */ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int ctrl; /* parse the arguments */ ctrl = _pam_parse (pamh, argc, argv); return securetty_perform_check(pamh, ctrl, __FUNCTION__); } PAM_EXTERN int pam_sm_setcred (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } /* --- account management functions --- */ PAM_EXTERN int pam_sm_acct_mgmt (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int ctrl; /* parse the arguments */ ctrl = _pam_parse (pamh, argc, argv); /* take the easy route */ return securetty_perform_check(pamh, ctrl, __FUNCTION__); } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_securetty_modstruct = { "pam_securetty", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, NULL, NULL, NULL, }; #endif /* PAM_STATIC */ /* end of module definition */ Linux-PAM-1.1.8/modules/pam_securetty/pam_securetty.8.xml0000644000000000000000000001267412160065211020236 00000000000000 pam_securetty 8 Linux-PAM Manual pam_securetty Limit root login to special devices pam_securetty.so debug DESCRIPTION pam_securetty is a PAM module that allows root logins only if the user is logging in on a "secure" tty, as defined by the listing in /etc/securetty. pam_securetty also checks to make sure that /etc/securetty is a plain file and not world writable. It will also allow root logins on the tty specified with switch on the kernel command line and on ttys from the /sys/class/tty/console/active. This module has no effect on non-root users and requires that the application fills in the PAM_TTY item correctly. For canonical usage, should be listed as a required authentication method before any sufficient authentication methods. OPTIONS Print debug information. Do not automatically allow root logins on the kernel console device, as specified on the kernel command line or by the sys file, if it is not also specified in the /etc/securetty file. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_SUCCESS The user is allowed to continue authentication. Either the user is not root, or the root user is trying to log in on an acceptable device. PAM_AUTH_ERR Authentication is rejected. Either root is attempting to log in via an unacceptable device, or the /etc/securetty file is world writable or not a normal file. PAM_INCOMPLETE An application error occurred. pam_securetty was not able to get information it required from the application that called it. PAM_SERVICE_ERR An error occurred while the module was determining the user's name or tty, or the module could not open /etc/securetty. PAM_USER_UNKNOWN The module could not find the user name in the /etc/passwd file to verify whether the user had a UID of 0. Therefore, the results of running this module are ignored. EXAMPLES auth required pam_securetty.so auth required pam_unix.so SEE ALSO securetty5 , pam.conf5 , pam.d5 , pam8 AUTHOR pam_securetty was written by Elliot Lee <sopwith@cuc.edu>. Linux-PAM-1.1.8/modules/pam_securetty/pam_securetty.80000644000000000000000000000710112216527607017442 00000000000000'\" t .\" Title: pam_securetty .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SECURETTY" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_securetty \- Limit root login to special devices .SH "SYNOPSIS" .HP \w'\fBpam_securetty\&.so\fR\ 'u \fBpam_securetty\&.so\fR [debug] .SH "DESCRIPTION" .PP pam_securetty is a PAM module that allows root logins only if the user is logging in on a "secure" tty, as defined by the listing in /etc/securetty\&. pam_securetty also checks to make sure that /etc/securetty is a plain file and not world writable\&. It will also allow root logins on the tty specified with \fBconsole=\fR switch on the kernel command line and on ttys from the /sys/class/tty/console/active\&. .PP This module has no effect on non\-root users and requires that the application fills in the \fBPAM_TTY\fR item correctly\&. .PP For canonical usage, should be listed as a \fBrequired\fR authentication method before any \fBsufficient\fR authentication methods\&. .SH "OPTIONS" .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBnoconsole\fR .RS 4 Do not automatically allow root logins on the kernel console device, as specified on the kernel command line or by the sys file, if it is not also specified in the /etc/securetty file\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBauth\fR module type is provided\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 The user is allowed to continue authentication\&. Either the user is not root, or the root user is trying to log in on an acceptable device\&. .RE .PP PAM_AUTH_ERR .RS 4 Authentication is rejected\&. Either root is attempting to log in via an unacceptable device, or the /etc/securetty file is world writable or not a normal file\&. .RE .PP PAM_INCOMPLETE .RS 4 An application error occurred\&. pam_securetty was not able to get information it required from the application that called it\&. .RE .PP PAM_SERVICE_ERR .RS 4 An error occurred while the module was determining the user\*(Aqs name or tty, or the module could not open /etc/securetty\&. .RE .PP PAM_USER_UNKNOWN .RS 4 The module could not find the user name in the /etc/passwd file to verify whether the user had a UID of 0\&. Therefore, the results of running this module are ignored\&. .RE .SH "EXAMPLES" .PP .if n \{\ .RS 4 .\} .nf auth required pam_securetty\&.so auth required pam_unix\&.so .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBsecuretty\fR(5), \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_securetty was written by Elliot Lee \&. Linux-PAM-1.1.8/modules/pam_securetty/Makefile.am0000644000000000000000000000137312160065211016510 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_securetty TESTS = tst-pam_securetty man_MANS = pam_securetty.8 XMLS = README.xml pam_securetty.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_securetty.la pam_securetty_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_securetty.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_securetty/README0000644000000000000000000000247612216527607015357 00000000000000pam_securetty — Limit root login to special devices ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_securetty is a PAM module that allows root logins only if the user is logging in on a "secure" tty, as defined by the listing in /etc/securetty. pam_securetty also checks to make sure that /etc/securetty is a plain file and not world writable. It will also allow root logins on the tty specified with console= switch on the kernel command line and on ttys from the /sys/class/tty/ console/active. This module has no effect on non-root users and requires that the application fills in the PAM_TTY item correctly. For canonical usage, should be listed as a required authentication method before any sufficient authentication methods. OPTIONS debug Print debug information. noconsole Do not automatically allow root logins on the kernel console device, as specified on the kernel command line or by the sys file, if it is not also specified in the /etc/securetty file. EXAMPLES auth required pam_securetty.so auth required pam_unix.so AUTHOR pam_securetty was written by Elliot Lee . Linux-PAM-1.1.8/modules/pam_securetty/Makefile.in0000644000000000000000000006022612216527537016543 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_securetty DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_securetty_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_securetty_la_SOURCES = pam_securetty.c pam_securetty_la_OBJECTS = pam_securetty.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_securetty.c DIST_SOURCES = pam_securetty.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_securetty TESTS = tst-pam_securetty man_MANS = pam_securetty.8 XMLS = README.xml pam_securetty.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_securetty.la pam_securetty_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_securetty/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_securetty/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_securetty.la: $(pam_securetty_la_OBJECTS) $(pam_securetty_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_securetty_la_OBJECTS) $(pam_securetty_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_securetty.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_securetty.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_securetty/README.xml0000644000000000000000000000225612160065211016134 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_securetty.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_securetty-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_timestamp/0000755000000000000000000000000012216542312014510 500000000000000Linux-PAM-1.1.8/modules/pam_timestamp/sha1.h0000644000000000000000000000454212160065211015436 00000000000000/* Yet another SHA-1 implementation. * * Copyright (c) 2003 Red Hat, Inc. * Written by Nalin Dahyabhai * * 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. * */ #ifndef pam_timestamp_sha1_h #define pam_timestamp_sha1_h #include #define SHA1_BLOCK_SIZE 64 struct sha1_context { size_t count; unsigned char pending[SHA1_BLOCK_SIZE]; u_int32_t counts[2]; size_t pending_count; u_int32_t a, b, c, d, e; }; #define SHA1_OUTPUT_SIZE 20 void sha1_init(struct sha1_context *ctx); void sha1_update(struct sha1_context *ctx, const unsigned char *data, size_t length); size_t sha1_output(struct sha1_context *ctx, unsigned char *out); #endif Linux-PAM-1.1.8/modules/pam_timestamp/pam_timestamp.80000644000000000000000000000650212216527613017373 00000000000000'\" t .\" Title: pam_timestamp .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_TIMESTAMP" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_timestamp \- Authenticate using cached successful authentication attempts .SH "SYNOPSIS" .HP \w'\fBpam_timestamp\&.so\fR\ 'u \fBpam_timestamp\&.so\fR [timestamp_timeout=\fInumber\fR] [verbose] [debug] .SH "DESCRIPTION" .PP In a nutshell, \fIpam_timestamp\fR caches successful authentication attempts, and allows you to use a recent successful attempt as the basis for authentication\&. This is similar mechanism which is used in \fBsudo\fR\&. .PP When an application opens a session using \fIpam_timestamp\fR, a timestamp file is created in the \fItimestampdir\fR directory for the user\&. When an application attempts to authenticate the user, a \fIpam_timestamp\fR will treat a sufficiently recent timestamp file as grounds for succeeding\&. .SH "OPTIONS" .PP \fBtimestamp_timeout=\fR\fB\fInumber\fR\fR .RS 4 How long should pam_timestamp treat timestamp as valid after their last modification date (in seconds)\&. Default is 300 seconds\&. .RE .PP \fBverbose\fR .RS 4 Attempt to inform the user when access is granted\&. .RE .PP \fBdebug\fR .RS 4 Turns on debugging messages sent to \fBsyslog\fR(3)\&. .RE .SH "MODULE TYPES PROVIDED" .PP The \fBauth\fR and \fBsession\fR module types are provided\&. .SH "RETURN VALUES" .PP PAM_AUTH_ERR .RS 4 The module was not able to retrieve the user name or no valid timestamp file was found\&. .RE .PP PAM_SUCCESS .RS 4 Everything was successful\&. .RE .PP PAM_SESSION_ERR .RS 4 Timestamp file could not be created or updated\&. .RE .SH "NOTES" .PP Users can get confused when they are not always asked for passwords when running a given program\&. Some users reflexively begin typing information before noticing that it is not being asked for\&. .SH "EXAMPLES" .sp .if n \{\ .RS 4 .\} .nf auth sufficient pam_timestamp\&.so verbose auth required pam_unix\&.so session required pam_unix\&.so session optional pam_timestamp\&.so .fi .if n \{\ .RE .\} .SH "FILES" .PP /var/run/sudo/\&.\&.\&. .RS 4 timestamp files and directories .RE .SH "SEE ALSO" .PP \fBpam_timestamp_check\fR(8), \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_timestamp was written by Nalin Dahyabhai\&. Linux-PAM-1.1.8/modules/pam_timestamp/hmacsha1.c0000644000000000000000000001637612160065211016272 00000000000000/* An implementation of HMAC using SHA-1. * * Copyright (c) 2003 Red Hat, Inc. * Written by Nalin Dahyabhai * * 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. * */ /* See RFC 2104 for descriptions. */ #include #include #include #include #include #include #include #include #include #include #include #include "hmacsha1.h" #include "sha1.h" #define MINIMUM_KEY_SIZE SHA1_OUTPUT_SIZE #define MAXIMUM_KEY_SIZE SHA1_BLOCK_SIZE static void hmac_key_create(pam_handle_t *pamh, const char *filename, size_t key_size, uid_t owner, gid_t group) { int randfd, keyfd, i; size_t count; char *key; /* Open the destination file. */ keyfd = open(filename, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, S_IRUSR | S_IWUSR); if (keyfd == -1) { pam_syslog(pamh, LOG_ERR, "Cannot create %s: %m", filename); return; } if (fchown(keyfd, owner, group) == -1) { pam_syslog(pamh, LOG_ERR, "Cannot chown %s: %m", filename); return; } /* Open the random device to get key data. */ randfd = open("/dev/urandom", O_RDONLY); if (randfd == -1) { pam_syslog(pamh, LOG_ERR, "Cannot open /dev/urandom: %m"); close(keyfd); return; } /* Read random data for use as the key. */ key = malloc(key_size); count = 0; if (!key) { close(keyfd); close(randfd); return; } while (count < key_size) { i = read(randfd, key + count, key_size - count); if ((i == 0) || (i == -1)) { break; } count += i; } close(randfd); /* If we didn't get enough, stop here. */ if (count < key_size) { pam_syslog(pamh, LOG_ERR, "Short read on random device"); memset(key, 0, key_size); free(key); close(keyfd); return; } /* Now write the key. */ count = 0; while (count < key_size) { i = write(keyfd, key + count, key_size - count); if ((i == 0) || (i == -1)) { break; } count += i; } memset(key, 0, key_size); free(key); close(keyfd); } static void hmac_key_read(pam_handle_t *pamh, const char *filename, size_t default_key_size, uid_t owner, gid_t group, void **key, size_t *key_size) { char *tmp; int keyfd, i, count; struct stat st; tmp = NULL; *key = NULL; *key_size = 0; /* Try to open the key file. */ keyfd = open(filename, O_RDONLY); if (keyfd == -1) { /* No such thing? Create it. */ if (errno == ENOENT) { hmac_key_create(pamh, filename, default_key_size, owner, group); keyfd = open(filename, O_RDONLY); } else { pam_syslog(pamh, LOG_ERR, "Cannot open %s: %m", filename); } if (keyfd == -1) return; } /* If we failed to open the file, we're done. */ if (fstat(keyfd, &st) == -1) { close(keyfd); return; } /* Read the contents of the file. */ tmp = malloc(st.st_size); if (!tmp) { close(keyfd); return; } count = 0; while (count < st.st_size) { i = read(keyfd, tmp + count, st.st_size - count); if ((i == 0) || (i == -1)) { break; } count += i; } close(keyfd); /* Require that we got the expected amount of data. */ if (count < st.st_size) { memset(tmp, 0, st.st_size); free(tmp); return; } /* Pass the key back. */ *key = tmp; *key_size = st.st_size; } static void xor_block(unsigned char *p, unsigned char byte, size_t length) { size_t i; for (i = 0; i < length; i++) { p[i] = p[i] ^ byte; } } void hmac_sha1_generate(void **mac, size_t *mac_length, const void *raw_key, size_t raw_key_size, const void *text, size_t text_length) { unsigned char key[MAXIMUM_KEY_SIZE], tmp_key[MAXIMUM_KEY_SIZE]; size_t maximum_key_size = SHA1_BLOCK_SIZE, minimum_key_size = SHA1_OUTPUT_SIZE; const unsigned char ipad = 0x36, opad = 0x5c; struct sha1_context sha1; unsigned char inner[SHA1_OUTPUT_SIZE], outer[SHA1_OUTPUT_SIZE]; *mac = NULL; *mac_length = 0; #ifndef HMAC_ALLOW_SHORT_KEYS /* If the key is too short, don't bother. */ if (raw_key_size < minimum_key_size) { return; } #endif /* If the key is too long, "compress" it, else copy it and pad it * out with zero bytes. */ memset(key, 0, sizeof(key)); if (raw_key_size > maximum_key_size) { sha1_init(&sha1); sha1_update(&sha1, raw_key, raw_key_size); sha1_output(&sha1, key); } else { memmove(key, raw_key, raw_key_size); } /* Generate the inner sum. */ memcpy(tmp_key, key, sizeof(tmp_key)); xor_block(tmp_key, ipad, sizeof(tmp_key)); sha1_init(&sha1); sha1_update(&sha1, tmp_key, sizeof(tmp_key)); sha1_update(&sha1, text, text_length); sha1_output(&sha1, inner); /* Generate the outer sum. */ memcpy(tmp_key, key, sizeof(tmp_key)); xor_block(tmp_key, opad, sizeof(tmp_key)); sha1_init(&sha1); sha1_update(&sha1, tmp_key, sizeof(tmp_key)); sha1_update(&sha1, inner, sizeof(inner)); sha1_output(&sha1, outer); /* We don't need any of the keys any more. */ memset(key, 0, sizeof(key)); memset(tmp_key, 0, sizeof(tmp_key)); /* Allocate space to store the output. */ *mac_length = sizeof(outer); *mac = malloc(*mac_length); if (*mac == NULL) { *mac_length = 0; return; } memcpy(*mac, outer, *mac_length); } void hmac_sha1_generate_file(pam_handle_t *pamh, void **mac, size_t *mac_length, const char *keyfile, uid_t owner, gid_t group, const void *text, size_t text_length) { void *key; size_t key_length; hmac_key_read(pamh, keyfile, MAXIMUM_KEY_SIZE, owner, group, &key, &key_length); if (key == NULL) { *mac = NULL; *mac_length = 0; return; } hmac_sha1_generate(mac, mac_length, key, key_length, text, text_length); memset(key, 0, key_length); free(key); } size_t hmac_sha1_size(void) { return SHA1_OUTPUT_SIZE; } Linux-PAM-1.1.8/modules/pam_timestamp/pam_timestamp.c0000644000000000000000000005166412160065211017444 00000000000000/****************************************************************************** * A module for Linux-PAM that will cache authentication results, inspired by * (and implemented with an eye toward being mixable with) sudo. * * Copyright (c) 2002 Red Hat, Inc. * Written by Nalin Dahyabhai * * 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. * */ #define PAM_SM_AUTH #define PAM_SM_SESSION #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "hmacsha1.h" #include #include #include #include /* The default timeout we use is 5 minutes, which matches the sudo default * for the timestamp_timeout parameter. */ #define DEFAULT_TIMESTAMP_TIMEOUT (5 * 60) #define MODULE "pam_timestamp" #define TIMESTAMPDIR "/var/run/sudo" #define TIMESTAMPKEY TIMESTAMPDIR "/_pam_timestamp_key" /* Various buffers we use need to be at least as large as either PATH_MAX or * LINE_MAX, so choose the larger of the two. */ #if (LINE_MAX > PATH_MAX) #define BUFLEN LINE_MAX #else #define BUFLEN PATH_MAX #endif /* Return PAM_SUCCESS if the given directory looks "safe". */ static int check_dir_perms(pam_handle_t *pamh, const char *tdir) { char scratch[BUFLEN]; struct stat st; int i; /* Check that the directory is "safe". */ if ((tdir == NULL) || (strlen(tdir) == 0)) { return PAM_AUTH_ERR; } /* Iterate over the path, checking intermediate directories. */ memset(scratch, 0, sizeof(scratch)); for (i = 0; (tdir[i] != '\0') && (i < (int)sizeof(scratch)); i++) { scratch[i] = tdir[i]; if ((scratch[i] == '/') || (tdir[i + 1] == '\0')) { /* We now have the name of a directory in the path, so * we need to check it. */ if ((lstat(scratch, &st) == -1) && (errno != ENOENT)) { pam_syslog(pamh, LOG_ERR, "unable to read `%s': %m", scratch); return PAM_AUTH_ERR; } if (!S_ISDIR(st.st_mode)) { pam_syslog(pamh, LOG_ERR, "`%s' is not a directory", scratch); return PAM_AUTH_ERR; } if (S_ISLNK(st.st_mode)) { pam_syslog(pamh, LOG_ERR, "`%s' is a symbolic link", scratch); return PAM_AUTH_ERR; } if (st.st_uid != 0) { pam_syslog(pamh, LOG_ERR, "`%s' owner UID != 0", scratch); return PAM_AUTH_ERR; } if (st.st_gid != 0) { pam_syslog(pamh, LOG_ERR, "`%s' owner GID != 0", scratch); return PAM_AUTH_ERR; } if ((st.st_mode & (S_IWGRP | S_IWOTH)) != 0) { pam_syslog(pamh, LOG_ERR, "`%s' permissions are lax", scratch); return PAM_AUTH_ERR; } } } return PAM_SUCCESS; } /* Validate a tty pathname as actually belonging to a tty, and return its base * name if it's valid. */ static const char * check_tty(const char *tty) { /* Check that we're not being set up to take a fall. */ if ((tty == NULL) || (strlen(tty) == 0)) { return NULL; } /* Pull out the meaningful part of the tty's name. */ if (strchr(tty, '/') != NULL) { if (strncmp(tty, "/dev/", 5) != 0) { /* Make sure the device node is actually in /dev/, * noted by Michal Zalewski. */ return NULL; } tty = strrchr(tty, '/') + 1; } /* Make sure the tty wasn't actually a directory (no basename). */ if (strlen(tty) == 0) { return NULL; } return tty; } /* Determine the right path name for a given user's timestamp. */ static int format_timestamp_name(char *path, size_t len, const char *timestamp_dir, const char *tty, const char *ruser, const char *user) { if (strcmp(ruser, user) == 0) { return snprintf(path, len, "%s/%s/%s", timestamp_dir, ruser, tty); } else { return snprintf(path, len, "%s/%s/%s:%s", timestamp_dir, ruser, tty, user); } } /* Check if a given timestamp date, when compared to a current time, fits * within the given interval. */ static int timestamp_good(time_t then, time_t now, time_t interval) { if (((now >= then) && ((now - then) < interval)) || ((now < then) && ((then - now) < (2 * interval)))) { return PAM_SUCCESS; } return PAM_AUTH_ERR; } static int check_login_time(const char *ruser, time_t timestamp) { struct utmp utbuf, *ut; time_t oldest_login = 0; setutent(); while( #ifdef HAVE_GETUTENT_R !getutent_r(&utbuf, &ut) #else (ut = getutent()) != NULL #endif ) { if (ut->ut_type != USER_PROCESS) { continue; } if (strncmp(ruser, ut->ut_user, sizeof(ut->ut_user) != 0)) { continue; } if (oldest_login == 0 || oldest_login > ut->ut_tv.tv_sec) { oldest_login = ut->ut_tv.tv_sec; } } endutent(); if(oldest_login == 0 || timestamp < oldest_login) { return PAM_AUTH_ERR; } return PAM_SUCCESS; } #ifndef PAM_TIMESTAMP_MAIN static int get_ruser(pam_handle_t *pamh, char *ruserbuf, size_t ruserbuflen) { const void *ruser; struct passwd *pwd; if (ruserbuf == NULL || ruserbuflen < 1) return -2; /* Get the name of the source user. */ if (pam_get_item(pamh, PAM_RUSER, &ruser) != PAM_SUCCESS) { ruser = NULL; } if ((ruser == NULL) || (strlen(ruser) == 0)) { /* Barring that, use the current RUID. */ pwd = pam_modutil_getpwuid(pamh, getuid()); if (pwd != NULL) { ruser = pwd->pw_name; } } if (ruser == NULL || strlen(ruser) >= ruserbuflen) { *ruserbuf = '\0'; return -1; } strcpy(ruserbuf, ruser); return 0; } /* Get the path to the timestamp to use. */ static int get_timestamp_name(pam_handle_t *pamh, int argc, const char **argv, char *path, size_t len) { const char *user, *tty; const void *void_tty; const char *tdir = TIMESTAMPDIR; char ruser[BUFLEN]; int i, debug = 0; /* Parse arguments. */ for (i = 0; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) { debug = 1; } } for (i = 0; i < argc; i++) { if (strncmp(argv[i], "timestampdir=", 13) == 0) { tdir = argv[i] + 13; if (debug) { pam_syslog(pamh, LOG_DEBUG, "storing timestamps in `%s'", tdir); } } } i = check_dir_perms(pamh, tdir); if (i != PAM_SUCCESS) { return i; } /* Get the name of the target user. */ if (pam_get_user(pamh, &user, NULL) != PAM_SUCCESS) { user = NULL; } if ((user == NULL) || (strlen(user) == 0)) { return PAM_AUTH_ERR; } if (debug) { pam_syslog(pamh, LOG_DEBUG, "becoming user `%s'", user); } /* Get the name of the source user. */ if (get_ruser(pamh, ruser, sizeof(ruser)) || strlen(ruser) == 0) { return PAM_AUTH_ERR; } if (debug) { pam_syslog(pamh, LOG_DEBUG, "currently user `%s'", ruser); } /* Get the name of the terminal. */ if (pam_get_item(pamh, PAM_TTY, &void_tty) != PAM_SUCCESS) { tty = NULL; } else { tty = void_tty; } if ((tty == NULL) || (strlen(tty) == 0)) { tty = ttyname(STDIN_FILENO); if ((tty == NULL) || (strlen(tty) == 0)) { tty = ttyname(STDOUT_FILENO); } if ((tty == NULL) || (strlen(tty) == 0)) { tty = ttyname(STDERR_FILENO); } if ((tty == NULL) || (strlen(tty) == 0)) { /* Match sudo's behavior for this case. */ tty = "unknown"; } } if (debug) { pam_syslog(pamh, LOG_DEBUG, "tty is `%s'", tty); } /* Snip off all but the last part of the tty name. */ tty = check_tty(tty); if (tty == NULL) { return PAM_AUTH_ERR; } /* Generate the name of the file used to cache auth results. These * paths should jive with sudo's per-tty naming scheme. */ if (format_timestamp_name(path, len, tdir, tty, ruser, user) >= (int)len) { return PAM_AUTH_ERR; } if (debug) { pam_syslog(pamh, LOG_DEBUG, "using timestamp file `%s'", path); } return PAM_SUCCESS; } /* Tell the user that access has been granted. */ static void verbose_success(pam_handle_t *pamh, long diff) { pam_info(pamh, _("Access granted (last access was %ld seconds ago)."), diff); } PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) { struct stat st; time_t interval = DEFAULT_TIMESTAMP_TIMEOUT; int i, fd, debug = 0, verbose = 0; char path[BUFLEN], *p, *message, *message_end; long tmp; const void *void_service; const char *service; time_t now, then; /* Parse arguments. */ for (i = 0; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) { debug = 1; } } for (i = 0; i < argc; i++) { if (strncmp(argv[i], "timestamp_timeout=", 18) == 0) { tmp = strtol(argv[i] + 18, &p, 0); if ((p != NULL) && (*p == '\0')) { interval = tmp; if (debug) { pam_syslog(pamh, LOG_DEBUG, "setting timeout to %ld" " seconds", (long)interval); } } } else if (strcmp(argv[i], "verbose") == 0) { verbose = 1; if (debug) { pam_syslog(pamh, LOG_DEBUG, "becoming more verbose"); } } } if (flags & PAM_SILENT) { verbose = 0; } /* Get the name of the timestamp file. */ if (get_timestamp_name(pamh, argc, argv, path, sizeof(path)) != PAM_SUCCESS) { return PAM_AUTH_ERR; } /* Get the name of the service. */ if (pam_get_item(pamh, PAM_SERVICE, &void_service) != PAM_SUCCESS) { service = NULL; } else { service = void_service; } if ((service == NULL) || (strlen(service) == 0)) { service = "(unknown)"; } /* Open the timestamp file. */ fd = open(path, O_RDONLY | O_NOFOLLOW); if (fd == -1) { if (debug) { pam_syslog(pamh, LOG_DEBUG, "cannot open timestamp `%s': %m", path); } return PAM_AUTH_ERR; } if (fstat(fd, &st) == 0) { int count; void *mac; size_t maclen; char ruser[BUFLEN]; /* Check that the file is owned by the superuser. */ if ((st.st_uid != 0) || (st.st_gid != 0)) { pam_syslog(pamh, LOG_ERR, "timestamp file `%s' is " "not owned by root", path); close(fd); return PAM_AUTH_ERR; } /* Check that the file is a normal file. */ if (!(S_ISREG(st.st_mode))) { pam_syslog(pamh, LOG_ERR, "timestamp file `%s' is " "not a regular file", path); close(fd); return PAM_AUTH_ERR; } /* Check that the file is the expected size. */ if (st.st_size == 0) { /* Invalid, but may have been created by sudo. */ close(fd); return PAM_AUTH_ERR; } if (st.st_size != (off_t)(strlen(path) + 1 + sizeof(then) + hmac_sha1_size())) { pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' " "appears to be corrupted", path); close(fd); return PAM_AUTH_ERR; } /* Read the file contents. */ message = malloc(st.st_size); count = 0; if (!message) { close(fd); return PAM_BUF_ERR; } while (count < st.st_size) { i = read(fd, message + count, st.st_size - count); if ((i == 0) || (i == -1)) { break; } count += i; } if (count < st.st_size) { pam_syslog(pamh, LOG_NOTICE, "error reading timestamp " "file `%s': %m", path); close(fd); free(message); return PAM_AUTH_ERR; } message_end = message + strlen(path) + 1 + sizeof(then); /* Regenerate the MAC. */ hmac_sha1_generate_file(pamh, &mac, &maclen, TIMESTAMPKEY, 0, 0, message, message_end - message); if ((mac == NULL) || (memcmp(path, message, strlen(path)) != 0) || (memcmp(mac, message_end, maclen) != 0)) { pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' is " "corrupted", path); close(fd); free(mac); free(message); return PAM_AUTH_ERR; } free(mac); memmove(&then, message + strlen(path) + 1, sizeof(then)); free(message); /* Check oldest login against timestamp */ if (get_ruser(pamh, ruser, sizeof(ruser))) { close(fd); return PAM_AUTH_ERR; } if (check_login_time(ruser, then) != PAM_SUCCESS) { pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' is " "older than oldest login, disallowing " "access to %s for user %s", path, service, ruser); close(fd); return PAM_AUTH_ERR; } /* Compare the dates. */ now = time(NULL); if (timestamp_good(then, now, interval) == PAM_SUCCESS) { close(fd); pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' is " "only %ld seconds old, allowing access to %s " "for user %s", path, (long) (now - st.st_mtime), service, ruser); if (verbose) { verbose_success(pamh, now - st.st_mtime); } return PAM_SUCCESS; } else { close(fd); pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' has " "unacceptable age (%ld seconds), disallowing " "access to %s for user %s", path, (long) (now - st.st_mtime), service, ruser); return PAM_AUTH_ERR; } } close(fd); /* Fail by default. */ return PAM_AUTH_ERR; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { char path[BUFLEN], subdir[BUFLEN], *text, *p; void *mac; size_t maclen; time_t now; int fd, i, debug = 0; /* Parse arguments. */ for (i = 0; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) { debug = 1; } } /* Get the name of the timestamp file. */ if (get_timestamp_name(pamh, argc, argv, path, sizeof(path)) != PAM_SUCCESS) { return PAM_SESSION_ERR; } /* Create the directory for the timestamp file if it doesn't already * exist. */ for (i = 1; path[i] != '\0'; i++) { if (path[i] == '/') { /* Attempt to create the directory. */ strncpy(subdir, path, i); subdir[i] = '\0'; if (mkdir(subdir, 0700) == 0) { /* Attempt to set the owner to the superuser. */ if (lchown(subdir, 0, 0) != 0) { if (debug) { pam_syslog(pamh, LOG_DEBUG, "error setting permissions on `%s': %m", subdir); } return PAM_SESSION_ERR; } } else { if (errno != EEXIST) { if (debug) { pam_syslog(pamh, LOG_DEBUG, "error creating directory `%s': %m", subdir); } return PAM_SESSION_ERR; } } } } /* Generate the message. */ text = malloc(strlen(path) + 1 + sizeof(now) + hmac_sha1_size()); if (text == NULL) { pam_syslog(pamh, LOG_ERR, "unable to allocate memory: %m"); return PAM_SESSION_ERR; } p = text; strcpy(text, path); p += strlen(path) + 1; now = time(NULL); memmove(p, &now, sizeof(now)); p += sizeof(now); /* Generate the MAC and append it to the plaintext. */ hmac_sha1_generate_file(pamh, &mac, &maclen, TIMESTAMPKEY, 0, 0, text, p - text); if (mac == NULL) { pam_syslog(pamh, LOG_ERR, "failure generating MAC: %m"); free(text); return PAM_SESSION_ERR; } memmove(p, mac, maclen); p += maclen; free(mac); /* Open the file. */ fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); if (fd == -1) { pam_syslog(pamh, LOG_ERR, "unable to open `%s': %m", path); free(text); return PAM_SESSION_ERR; } /* Attempt to set the owner to the superuser. */ if (fchown(fd, 0, 0) != 0) { if (debug) { pam_syslog(pamh, LOG_DEBUG, "error setting ownership of `%s': %m", path); } close(fd); free(text); return PAM_SESSION_ERR; } /* Write the timestamp to the file. */ if (write(fd, text, p - text) != p - text) { pam_syslog(pamh, LOG_ERR, "unable to write to `%s': %m", path); close(fd); free(text); return PAM_SESSION_ERR; } /* Close the file and return successfully. */ close(fd); free(text); pam_syslog(pamh, LOG_DEBUG, "updated timestamp file `%s'", path); return PAM_SUCCESS; } PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_timestamp_modstruct = { "pam_timestamp", pam_sm_authenticate, pam_sm_setcred, NULL, pam_sm_open_session, pam_sm_close_session, NULL }; #endif #else /* PAM_TIMESTAMP_MAIN */ #define USAGE "Usage: %s [[-k] | [-d]] [target user]\n" #define CHECK_INTERVAL 7 int main(int argc, char **argv) { int i, retval = 0, dflag = 0, kflag = 0; const char *target_user = NULL, *user = NULL, *tty = NULL; struct passwd *pwd; struct timeval tv; fd_set write_fds; char path[BUFLEN]; struct stat st; /* Check that there's nothing funny going on with stdio. */ if ((fstat(STDIN_FILENO, &st) == -1) || (fstat(STDOUT_FILENO, &st) == -1) || (fstat(STDERR_FILENO, &st) == -1)) { /* Appropriate the "no controlling tty" error code. */ return 3; } /* Parse arguments. */ while ((i = getopt(argc, argv, "dk")) != -1) { switch (i) { case 'd': dflag++; break; case 'k': kflag++; break; default: fprintf(stderr, USAGE, argv[0]); return 1; break; } } /* Bail if both -k and -d are given together. */ if ((kflag + dflag) > 1) { fprintf(stderr, USAGE, argv[0]); return 1; } /* Check that we're setuid. */ if (geteuid() != 0) { fprintf(stderr, "%s must be setuid root\n", argv[0]); retval = 2; } /* Check that we have a controlling tty. */ tty = ttyname(STDIN_FILENO); if ((tty == NULL) || (strlen(tty) == 0)) { tty = ttyname(STDOUT_FILENO); } if ((tty == NULL) || (strlen(tty) == 0)) { tty = ttyname(STDERR_FILENO); } if ((tty == NULL) || (strlen(tty) == 0)) { tty = "unknown"; } /* Get the name of the invoking (requesting) user. */ pwd = getpwuid(getuid()); if (pwd == NULL) { retval = 4; } /* Get the name of the target user. */ user = strdup(pwd->pw_name); if (user == NULL) { retval = 4; } else { target_user = (optind < argc) ? argv[optind] : user; if ((strchr(target_user, '.') != NULL) || (strchr(target_user, '/') != NULL) || (strchr(target_user, '%') != NULL)) { fprintf(stderr, "unknown user: %s\n", target_user); retval = 4; } } /* Sanity check the tty to make sure we should be checking * for timestamps which pertain to it. */ if (retval == 0) { tty = check_tty(tty); if (tty == NULL) { fprintf(stderr, "invalid tty\n"); retval = 6; } } do { /* Sanity check the timestamp directory itself. */ if (retval == 0) { if (check_dir_perms(NULL, TIMESTAMPDIR) != PAM_SUCCESS) { retval = 5; } } if (retval == 0) { /* Generate the name of the timestamp file. */ format_timestamp_name(path, sizeof(path), TIMESTAMPDIR, tty, user, target_user); } if (retval == 0) { if (kflag) { /* Remove the timestamp. */ if (lstat(path, &st) != -1) { retval = unlink(path); } } else { /* Check the timestamp. */ if (lstat(path, &st) != -1) { /* Check oldest login against timestamp */ if (check_login_time(user, st.st_mtime) != PAM_SUCCESS) { retval = 7; } else if (!timestamp_good(st.st_mtime, time(NULL), DEFAULT_TIMESTAMP_TIMEOUT) == PAM_SUCCESS) { retval = 7; } } else { retval = 7; } } } if (dflag > 0) { struct timeval now; /* Send the would-be-returned value to our parent. */ signal(SIGPIPE, SIG_DFL); fprintf(stdout, "%d\n", retval); fflush(stdout); /* Wait. */ gettimeofday(&now, NULL); tv.tv_sec = CHECK_INTERVAL; /* round the sleep time to get woken up on a whole second */ tv.tv_usec = 1000000 - now.tv_usec; if (now.tv_usec < 500000) tv.tv_sec--; FD_ZERO(&write_fds); FD_SET(STDOUT_FILENO, &write_fds); select(STDOUT_FILENO + 1, NULL, NULL, &write_fds, &tv); retval = 0; } } while (dflag > 0); return retval; } #endif Linux-PAM-1.1.8/modules/pam_timestamp/hmacsha1.h0000644000000000000000000000074212160065211016265 00000000000000#ifndef pam_timestamp_hmacfile_h #define pam_timestamp_hmacfile_h #include #include size_t hmac_sha1_size(void); void hmac_sha1_generate(void **mac, size_t *mac_length, const void *key, size_t key_length, const void *text, size_t text_length); void hmac_sha1_generate_file(pam_handle_t *pamh, void **mac, size_t *mac_length, const char *keyfile, uid_t owner, gid_t group, const void *text, size_t text_length); #endif Linux-PAM-1.1.8/modules/pam_timestamp/pam_timestamp_check.8.xml0000644000000000000000000001273712160065211021323 00000000000000 pam_timestamp_check 8 Linux-PAM Manual pam_timestamp_check Check to see if the default timestamp is valid pam_timestamp_check -k -d target_user DESCRIPTION With no arguments pam_timestamp_check will check to see if the default timestamp is valid, or optionally remove it. OPTIONS Instead of checking the validity of a timestamp, remove it. This is analogous to sudo's -k option. Instead of returning validity using an exit status, loop indefinitely, polling regularly and printing the status on standard output. By default pam_timestamp_check checks or removes timestamps generated by pam_timestamp when the user authenticates as herself. When the user authenticates as a different user, the name of the timestamp file changes to accommodate this. target_user allows to specify this user name. RETURN VALUES 0 The timestamp is valid. 2 The binary is not setuid root. 3 Invalid invocation. 4 User is unknown. 5 Permissions error. 6 Invalid controlling tty. 7 Timestamp is not valid. NOTES Users can get confused when they are not always asked for passwords when running a given program. Some users reflexively begin typing information before noticing that it is not being asked for. EXAMPLES auth sufficient pam_timestamp.so verbose auth required pam_unix.so session required pam_unix.so session optional pam_timestamp.so FILES /var/run/sudo/... timestamp files and directories SEE ALSO pam_timestamp_check8 , pam.conf5 , pam.d5 , pam8 AUTHOR pam_tally was written by Nalin Dahyabhai. Linux-PAM-1.1.8/modules/pam_timestamp/sha1.c0000644000000000000000000001565012160065211015433 00000000000000/* Yet another SHA-1 implementation. * * Copyright (c) 2003 Red Hat, Inc. * Written by Nalin Dahyabhai * * 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. * */ /* See http://www.itl.nist.gov/fipspubs/fip180-1.htm for descriptions. */ #include #include #include #include #include #include #include #include #include #include "sha1.h" static unsigned char padding[SHA1_BLOCK_SIZE] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static u_int32_t F(u_int32_t b, u_int32_t c, u_int32_t d) { return (b & c) | ((~b) & d); } static u_int32_t G(u_int32_t b, u_int32_t c, u_int32_t d) { return b ^ c ^ d; } static u_int32_t H(u_int32_t b, u_int32_t c, u_int32_t d) { return (b & c) | (b & d) | (c & d); } static u_int32_t RL(u_int32_t n, u_int32_t s) { return (n << s) | (n >> (32 - s)); } static u_int32_t sha1_round(u_int32_t (*FUNC)(u_int32_t, u_int32_t, u_int32_t), u_int32_t a, u_int32_t b, u_int32_t c, u_int32_t d, u_int32_t e, u_int32_t i, u_int32_t n) { return RL(a, 5) + FUNC(b, c, d) + e + i + n; } void sha1_init(struct sha1_context *ctx) { memset(ctx, 0, sizeof(*ctx)); ctx->a = 0x67452301; ctx->b = 0xefcdab89; ctx->c = 0x98badcfe; ctx->d = 0x10325476; ctx->e = 0xc3d2e1f0; } static void sha1_process(struct sha1_context *ctx, u_int32_t buffer[SHA1_BLOCK_SIZE / 4]) { u_int32_t a, b, c, d, e, temp; u_int32_t data[80]; int i; for (i = 0; i < 16; i++) { data[i] = htonl(buffer[i]); } for (i = 16; i < 80; i++) { data[i] = RL(data[i - 3] ^ data[i - 8] ^ data[i - 14] ^ data[i - 16], 1); } a = ctx->a; b = ctx->b; c = ctx->c; d = ctx->d; e = ctx->e; for (i = 0; i < 20; i++) { temp = sha1_round(F, a, b, c, d, e, data[i], 0x5a827999); e = d; d = c; c = RL(b, 30); b = a; a = temp; } for (i = 20; i < 40; i++) { temp = sha1_round(G, a, b, c, d, e, data[i], 0x6ed9eba1); e = d; d = c; c = RL(b, 30); b = a; a = temp; } for (i = 40; i < 60; i++) { temp = sha1_round(H, a, b, c, d, e, data[i], 0x8f1bbcdc); e = d; d = c; c = RL(b, 30); b = a; a = temp; } for (i = 60; i < 80; i++) { temp = sha1_round(G, a, b, c, d, e, data[i], 0xca62c1d6); e = d; d = c; c = RL(b, 30); b = a; a = temp; } ctx->a += a; ctx->b += b; ctx->c += c; ctx->d += d; ctx->e += e; memset(buffer, 0, sizeof(buffer[0]) * SHA1_BLOCK_SIZE / 4); memset(data, 0, sizeof(data)); } void sha1_update(struct sha1_context *ctx, const unsigned char *data, size_t length) { size_t i = 0, l = length, c, t; u_int32_t count = 0; /* Process any pending + data blocks. */ while (l + ctx->pending_count >= SHA1_BLOCK_SIZE) { c = ctx->pending_count; t = SHA1_BLOCK_SIZE - c; memcpy(ctx->pending + c, &data[i], t); sha1_process(ctx, (u_int32_t*) ctx->pending); i += t; l -= t; ctx->pending_count = 0; } /* Save what's left of the data block as a pending data block. */ c = ctx->pending_count; memcpy(ctx->pending + c, &data[i], l); ctx->pending_count += l; /* Update the message length. */ ctx->count += length; /* Update our internal counts. */ if (length != 0) { count = ctx->counts[0]; ctx->counts[0] += length; if (count >= ctx->counts[0]) { ctx->counts[1]++; } } } size_t sha1_output(struct sha1_context *ctx, unsigned char *out) { struct sha1_context ctx2; /* Output the sum. */ if (out != NULL) { u_int32_t c; memcpy(&ctx2, ctx, sizeof(ctx2)); /* Pad this block. */ c = ctx2.pending_count; memcpy(ctx2.pending + c, padding, SHA1_BLOCK_SIZE - c); /* Do we need to process two blocks now? */ if (c >= (SHA1_BLOCK_SIZE - (sizeof(u_int32_t) * 2))) { /* Process this block. */ sha1_process(&ctx2, (u_int32_t*) ctx2.pending); /* Set up another block. */ ctx2.pending_count = 0; memset(ctx2.pending, 0, SHA1_BLOCK_SIZE); ctx2.pending[0] = (c == SHA1_BLOCK_SIZE) ? 0x80 : 0; } /* Process the final block. */ ctx2.counts[1] <<= 3; if (ctx2.counts[0] >> 29) { ctx2.counts[1] |= (ctx2.counts[0] >> 29); } ctx2.counts[0] <<= 3; ctx2.counts[0] = htonl(ctx2.counts[0]); ctx2.counts[1] = htonl(ctx2.counts[1]); memcpy(ctx2.pending + 56, &ctx2.counts[1], sizeof(u_int32_t)); memcpy(ctx2.pending + 60, &ctx2.counts[0], sizeof(u_int32_t)); sha1_process(&ctx2, (u_int32_t*) ctx2.pending); /* Output the data. */ out[ 3] = (ctx2.a >> 0) & 0xff; out[ 2] = (ctx2.a >> 8) & 0xff; out[ 1] = (ctx2.a >> 16) & 0xff; out[ 0] = (ctx2.a >> 24) & 0xff; out[ 7] = (ctx2.b >> 0) & 0xff; out[ 6] = (ctx2.b >> 8) & 0xff; out[ 5] = (ctx2.b >> 16) & 0xff; out[ 4] = (ctx2.b >> 24) & 0xff; out[11] = (ctx2.c >> 0) & 0xff; out[10] = (ctx2.c >> 8) & 0xff; out[ 9] = (ctx2.c >> 16) & 0xff; out[ 8] = (ctx2.c >> 24) & 0xff; out[15] = (ctx2.d >> 0) & 0xff; out[14] = (ctx2.d >> 8) & 0xff; out[13] = (ctx2.d >> 16) & 0xff; out[12] = (ctx2.d >> 24) & 0xff; out[19] = (ctx2.e >> 0) & 0xff; out[18] = (ctx2.e >> 8) & 0xff; out[17] = (ctx2.e >> 16) & 0xff; out[16] = (ctx2.e >> 24) & 0xff; } return SHA1_OUTPUT_SIZE; } Linux-PAM-1.1.8/modules/pam_timestamp/hmacfile.c0000644000000000000000000001250512160065211016343 00000000000000/* * Copyright 2003,2004 Red Hat, Inc. * * 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. */ #include #include #include #include #include #include #include #include #include "hmacsha1.h" static void testvectors(void) { void *hmac; size_t hmac_len; size_t i, j; char hex[3]; struct vector { const char *key; int key_len; const char *data; int data_len; const char *hmac; } vectors[] = { { "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20, "Hi There", 8, "b617318655057264e28bc0b6fb378c8ef146be00", }, #ifdef HMAC_ALLOW_SHORT_KEYS { "Jefe", 4, "what do ya want for nothing?", 28, "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79", }, #endif { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20, "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50, "125d7342b9ac11cd91a39af48aa17b4f63f175d3", }, { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25, "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50, "4c9007f4026250c6bc8414f9bf50c86c2d7235da", }, { "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20, "Test With Truncation", 20, "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04", }, { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80, "Test Using Larger Than Block-Size Key - Hash Key First", 54, "aa4ae5e15272d00e95705637ce8a3b55ed402112", }, { "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80, "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", 73, "e8e99d0f45237d786d6bbaa7965c7808bbff1a91", }, }; for (i = 0; i < sizeof(vectors) / sizeof(vectors[0]); i++) { hmac = NULL; hmac_len = 0; hmac_sha1_generate(&hmac, &hmac_len, vectors[i].key, vectors[i].key_len, vectors[i].data, vectors[i].data_len); if (hmac != NULL) { unsigned char *hmacc = hmac; for (j = 0; j < hmac_len; j++) { snprintf(hex, sizeof(hex), "%02x", hmacc[j] & 0xff); if (strncasecmp(hex, vectors[i].hmac + 2 * j, 2) != 0) { printf("Incorrect result for vector %lu\n", i + 1); exit(1); } } free(hmac); } else { printf("Error in vector %lu.\n", i + 1); exit(1); } } } int main(int argc, char **argv) { void *hmac; size_t maclen; const char *keyfile; int i; size_t j; testvectors(); keyfile = argv[1]; for (i = 2; i < argc; i++) { hmac_sha1_generate_file(NULL, &hmac, &maclen, keyfile, -1, -1, argv[i], strlen(argv[i])); if (hmac != NULL) { unsigned char *hmacc = hmac; for (j = 0; j < maclen; j++) { printf("%02x", hmacc[j] & 0xff); } printf(" %s\n", argv[i]); free(hmac); } } return 0; } Linux-PAM-1.1.8/modules/pam_timestamp/Makefile.am0000644000000000000000000000266512160065211016471 00000000000000# # Copyright (c) 2005, 2009 Thorsten Kukuk # Copyright (c) 2005, 2008 Red Hat, Inc. # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README XMLS = README.xml pam_timestamp.8.xml pam_timestamp_check.8.xml man_MANS = pam_timestamp.8 pam_timestamp_check.8 dist_TESTS = tst-pam_timestamp nodist_TESTS = hmacfile TESTS = $(dist_TESTS) $(nodist_TESTS) EXTRA_DIST = $(man_MANS) $(XMLS) $(dist_TESTS) securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) noinst_HEADERS = hmacsha1.h sha1.h AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include pam_timestamp_la_LDFLAGS = -no-undefined -avoid-version -module $(AM_LDFLAGS) pam_timestamp_la_LIBADD = $(top_builddir)/libpam/libpam.la if HAVE_VERSIONING pam_timestamp_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_timestamp.la sbin_PROGRAMS = pam_timestamp_check pam_timestamp_la_SOURCES = pam_timestamp.c hmacsha1.c sha1.c pam_timestamp_la_CFLAGS = $(AM_CFLAGS) pam_timestamp_check_SOURCES = pam_timestamp_check.c pam_timestamp_check_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ pam_timestamp_check_LDADD = $(top_builddir)/libpam/libpam.la pam_timestamp_check_LDFLAGS = @PIE_LDFLAGS@ hmacfile_SOURCES = hmacfile.c hmacsha1.c sha1.c hmacfile_LDADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_timestamp.8.xml -include $(top_srcdir)/Make.xml.rules endif noinst_PROGRAMS = hmacfile Linux-PAM-1.1.8/modules/pam_timestamp/README0000644000000000000000000000274712216527613015331 00000000000000pam_timestamp — Authenticate using cached successful authentication attempts ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION In a nutshell, pam_timestamp caches successful authentication attempts, and allows you to use a recent successful attempt as the basis for authentication. This is similar mechanism which is used in sudo. When an application opens a session using pam_timestamp, a timestamp file is created in the timestampdir directory for the user. When an application attempts to authenticate the user, a pam_timestamp will treat a sufficiently recent timestamp file as grounds for succeeding. OPTIONS timestamp_timeout=number How long should pam_timestamp treat timestamp as valid after their last modification date (in seconds). Default is 300 seconds. verbose Attempt to inform the user when access is granted. debug Turns on debugging messages sent to syslog(3). NOTES Users can get confused when they are not always asked for passwords when running a given program. Some users reflexively begin typing information before noticing that it is not being asked for. EXAMPLES auth sufficient pam_timestamp.so verbose auth required pam_unix.so session required pam_unix.so session optional pam_timestamp.so AUTHOR pam_timestamp was written by Nalin Dahyabhai. Linux-PAM-1.1.8/modules/pam_timestamp/pam_timestamp.8.xml0000644000000000000000000001235412160065211020161 00000000000000 pam_timestamp 8 Linux-PAM Manual pam_timestamp Authenticate using cached successful authentication attempts pam_timestamp.so timestamp_timeout=number verbose debug DESCRIPTION In a nutshell, pam_timestamp caches successful authentication attempts, and allows you to use a recent successful attempt as the basis for authentication. This is similar mechanism which is used in sudo. When an application opens a session using pam_timestamp, a timestamp file is created in the timestampdir directory for the user. When an application attempts to authenticate the user, a pam_timestamp will treat a sufficiently recent timestamp file as grounds for succeeding. OPTIONS How long should pam_timestamp treat timestamp as valid after their last modification date (in seconds). Default is 300 seconds. Attempt to inform the user when access is granted. Turns on debugging messages sent to syslog3 . MODULE TYPES PROVIDED The and module types are provided. RETURN VALUES PAM_AUTH_ERR The module was not able to retrieve the user name or no valid timestamp file was found. PAM_SUCCESS Everything was successful. PAM_SESSION_ERR Timestamp file could not be created or updated. NOTES Users can get confused when they are not always asked for passwords when running a given program. Some users reflexively begin typing information before noticing that it is not being asked for. EXAMPLES auth sufficient pam_timestamp.so verbose auth required pam_unix.so session required pam_unix.so session optional pam_timestamp.so FILES /var/run/sudo/... timestamp files and directories SEE ALSO pam_timestamp_check8 , pam.conf5 , pam.d5 , pam8 AUTHOR pam_timestamp was written by Nalin Dahyabhai. Linux-PAM-1.1.8/modules/pam_timestamp/pam_timestamp_check.c0000644000000000000000000000414312160065211020567 00000000000000/****************************************************************************** * A module for Linux-PAM that will cache authentication results, inspired by * (and implemented with an eye toward being mixable with) sudo. * * Copyright (c) 2002 Red Hat, Inc. * Written by Nalin Dahyabhai * * 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. * */ #define PAM_TIMESTAMP_MAIN 1 #include "pam_timestamp.c" Linux-PAM-1.1.8/modules/pam_timestamp/pam_timestamp_check.80000644000000000000000000000621212216527613020526 00000000000000'\" t .\" Title: pam_timestamp_check .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_TIMESTAMP_CHECK" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_timestamp_check \- Check to see if the default timestamp is valid .SH "SYNOPSIS" .HP \w'\fBpam_timestamp_check\fR\ 'u \fBpam_timestamp_check\fR [\-k] [\-d] [\fItarget_user\fR] .SH "DESCRIPTION" .PP With no arguments \fBpam_timestamp_check\fR will check to see if the default timestamp is valid, or optionally remove it\&. .SH "OPTIONS" .PP \fB\-k\fR .RS 4 Instead of checking the validity of a timestamp, remove it\&. This is analogous to sudo\*(Aqs \fI\-k\fR option\&. .RE .PP \fB\-d\fR .RS 4 Instead of returning validity using an exit status, loop indefinitely, polling regularly and printing the status on standard output\&. .RE .PP \fB\fItarget_user\fR\fR .RS 4 By default \fBpam_timestamp_check\fR checks or removes timestamps generated by \fIpam_timestamp\fR when the user authenticates as herself\&. When the user authenticates as a different user, the name of the timestamp file changes to accommodate this\&. \fItarget_user\fR allows to specify this user name\&. .RE .SH "RETURN VALUES" .PP 0 .RS 4 The timestamp is valid\&. .RE .PP 2 .RS 4 The binary is not setuid root\&. .RE .PP 3 .RS 4 Invalid invocation\&. .RE .PP 4 .RS 4 User is unknown\&. .RE .PP 5 .RS 4 Permissions error\&. .RE .PP 6 .RS 4 Invalid controlling tty\&. .RE .PP 7 .RS 4 Timestamp is not valid\&. .RE .SH "NOTES" .PP Users can get confused when they are not always asked for passwords when running a given program\&. Some users reflexively begin typing information before noticing that it is not being asked for\&. .SH "EXAMPLES" .sp .if n \{\ .RS 4 .\} .nf auth sufficient pam_timestamp\&.so verbose auth required pam_unix\&.so session required pam_unix\&.so session optional pam_timestamp\&.so .fi .if n \{\ .RE .\} .SH "FILES" .PP /var/run/sudo/\&.\&.\&. .RS 4 timestamp files and directories .RE .SH "SEE ALSO" .PP \fBpam_timestamp_check\fR(8), \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_tally was written by Nalin Dahyabhai\&. Linux-PAM-1.1.8/modules/pam_timestamp/Makefile.in0000644000000000000000000010467012216527537016521 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2009 Thorsten Kukuk # Copyright (c) 2005, 2008 Red Hat, Inc. # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ TESTS = $(dist_TESTS) $(am__EXEEXT_1) @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map sbin_PROGRAMS = pam_timestamp_check$(EXEEXT) noinst_PROGRAMS = hmacfile$(EXEEXT) subdir = modules/pam_timestamp DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(sbindir)" \ "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_timestamp_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la am_pam_timestamp_la_OBJECTS = pam_timestamp_la-pam_timestamp.lo \ pam_timestamp_la-hmacsha1.lo pam_timestamp_la-sha1.lo pam_timestamp_la_OBJECTS = $(am_pam_timestamp_la_OBJECTS) pam_timestamp_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(pam_timestamp_la_CFLAGS) \ $(CFLAGS) $(pam_timestamp_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS) am_hmacfile_OBJECTS = hmacfile.$(OBJEXT) hmacsha1.$(OBJEXT) \ sha1.$(OBJEXT) hmacfile_OBJECTS = $(am_hmacfile_OBJECTS) hmacfile_DEPENDENCIES = $(top_builddir)/libpam/libpam.la am_pam_timestamp_check_OBJECTS = \ pam_timestamp_check-pam_timestamp_check.$(OBJEXT) pam_timestamp_check_OBJECTS = $(am_pam_timestamp_check_OBJECTS) pam_timestamp_check_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_timestamp_check_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(pam_timestamp_check_CFLAGS) $(CFLAGS) \ $(pam_timestamp_check_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_timestamp_la_SOURCES) $(hmacfile_SOURCES) \ $(pam_timestamp_check_SOURCES) DIST_SOURCES = $(pam_timestamp_la_SOURCES) $(hmacfile_SOURCES) \ $(pam_timestamp_check_SOURCES) man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= am__EXEEXT_1 = hmacfile$(EXEEXT) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README XMLS = README.xml pam_timestamp.8.xml pam_timestamp_check.8.xml man_MANS = pam_timestamp.8 pam_timestamp_check.8 dist_TESTS = tst-pam_timestamp nodist_TESTS = hmacfile EXTRA_DIST = $(man_MANS) $(XMLS) $(dist_TESTS) securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) noinst_HEADERS = hmacsha1.h sha1.h AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include pam_timestamp_la_LDFLAGS = -no-undefined -avoid-version -module \ $(AM_LDFLAGS) $(am__append_1) pam_timestamp_la_LIBADD = $(top_builddir)/libpam/libpam.la securelib_LTLIBRARIES = pam_timestamp.la pam_timestamp_la_SOURCES = pam_timestamp.c hmacsha1.c sha1.c pam_timestamp_la_CFLAGS = $(AM_CFLAGS) pam_timestamp_check_SOURCES = pam_timestamp_check.c pam_timestamp_check_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ pam_timestamp_check_LDADD = $(top_builddir)/libpam/libpam.la pam_timestamp_check_LDFLAGS = @PIE_LDFLAGS@ hmacfile_SOURCES = hmacfile.c hmacsha1.c sha1.c hmacfile_LDADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_timestamp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_timestamp/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_timestamp.la: $(pam_timestamp_la_OBJECTS) $(pam_timestamp_la_DEPENDENCIES) $(pam_timestamp_la_LINK) -rpath $(securelibdir) $(pam_timestamp_la_OBJECTS) $(pam_timestamp_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(sbindir)" && rm -f $$files clean-sbinPROGRAMS: @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list hmacfile$(EXEEXT): $(hmacfile_OBJECTS) $(hmacfile_DEPENDENCIES) @rm -f hmacfile$(EXEEXT) $(LINK) $(hmacfile_OBJECTS) $(hmacfile_LDADD) $(LIBS) pam_timestamp_check$(EXEEXT): $(pam_timestamp_check_OBJECTS) $(pam_timestamp_check_DEPENDENCIES) @rm -f pam_timestamp_check$(EXEEXT) $(pam_timestamp_check_LINK) $(pam_timestamp_check_OBJECTS) $(pam_timestamp_check_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmacfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmacsha1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_timestamp_la-hmacsha1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_timestamp_la-pam_timestamp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_timestamp_la-sha1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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_timestamp_la-pam_timestamp.lo: pam_timestamp.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_timestamp_la_CFLAGS) $(CFLAGS) -MT pam_timestamp_la-pam_timestamp.lo -MD -MP -MF $(DEPDIR)/pam_timestamp_la-pam_timestamp.Tpo -c -o pam_timestamp_la-pam_timestamp.lo `test -f 'pam_timestamp.c' || echo '$(srcdir)/'`pam_timestamp.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pam_timestamp_la-pam_timestamp.Tpo $(DEPDIR)/pam_timestamp_la-pam_timestamp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pam_timestamp.c' object='pam_timestamp_la-pam_timestamp.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_timestamp_la_CFLAGS) $(CFLAGS) -c -o pam_timestamp_la-pam_timestamp.lo `test -f 'pam_timestamp.c' || echo '$(srcdir)/'`pam_timestamp.c pam_timestamp_la-hmacsha1.lo: hmacsha1.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_timestamp_la_CFLAGS) $(CFLAGS) -MT pam_timestamp_la-hmacsha1.lo -MD -MP -MF $(DEPDIR)/pam_timestamp_la-hmacsha1.Tpo -c -o pam_timestamp_la-hmacsha1.lo `test -f 'hmacsha1.c' || echo '$(srcdir)/'`hmacsha1.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pam_timestamp_la-hmacsha1.Tpo $(DEPDIR)/pam_timestamp_la-hmacsha1.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hmacsha1.c' object='pam_timestamp_la-hmacsha1.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_timestamp_la_CFLAGS) $(CFLAGS) -c -o pam_timestamp_la-hmacsha1.lo `test -f 'hmacsha1.c' || echo '$(srcdir)/'`hmacsha1.c pam_timestamp_la-sha1.lo: sha1.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_timestamp_la_CFLAGS) $(CFLAGS) -MT pam_timestamp_la-sha1.lo -MD -MP -MF $(DEPDIR)/pam_timestamp_la-sha1.Tpo -c -o pam_timestamp_la-sha1.lo `test -f 'sha1.c' || echo '$(srcdir)/'`sha1.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pam_timestamp_la-sha1.Tpo $(DEPDIR)/pam_timestamp_la-sha1.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sha1.c' object='pam_timestamp_la-sha1.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_timestamp_la_CFLAGS) $(CFLAGS) -c -o pam_timestamp_la-sha1.lo `test -f 'sha1.c' || echo '$(srcdir)/'`sha1.c pam_timestamp_check-pam_timestamp_check.o: pam_timestamp_check.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_timestamp_check_CFLAGS) $(CFLAGS) -MT pam_timestamp_check-pam_timestamp_check.o -MD -MP -MF $(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Tpo -c -o pam_timestamp_check-pam_timestamp_check.o `test -f 'pam_timestamp_check.c' || echo '$(srcdir)/'`pam_timestamp_check.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Tpo $(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pam_timestamp_check.c' object='pam_timestamp_check-pam_timestamp_check.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) $(pam_timestamp_check_CFLAGS) $(CFLAGS) -c -o pam_timestamp_check-pam_timestamp_check.o `test -f 'pam_timestamp_check.c' || echo '$(srcdir)/'`pam_timestamp_check.c pam_timestamp_check-pam_timestamp_check.obj: pam_timestamp_check.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pam_timestamp_check_CFLAGS) $(CFLAGS) -MT pam_timestamp_check-pam_timestamp_check.obj -MD -MP -MF $(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Tpo -c -o pam_timestamp_check-pam_timestamp_check.obj `if test -f 'pam_timestamp_check.c'; then $(CYGPATH_W) 'pam_timestamp_check.c'; else $(CYGPATH_W) '$(srcdir)/pam_timestamp_check.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Tpo $(DEPDIR)/pam_timestamp_check-pam_timestamp_check.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pam_timestamp_check.c' object='pam_timestamp_check-pam_timestamp_check.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) $(pam_timestamp_check_CFLAGS) $(CFLAGS) -c -o pam_timestamp_check-pam_timestamp_check.obj `if test -f 'pam_timestamp_check.c'; then $(CYGPATH_W) 'pam_timestamp_check.c'; else $(CYGPATH_W) '$(srcdir)/pam_timestamp_check.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(sbindir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ clean-sbinPROGRAMS clean-securelibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-sbinPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-sbinPROGRAMS \ uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS \ clean-sbinPROGRAMS clean-securelibLTLIBRARIES 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-man8 install-pdf install-pdf-am install-ps \ install-ps-am install-sbinPROGRAMS \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-sbinPROGRAMS uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_timestamp.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_timestamp/README.xml0000644000000000000000000000254512160065211016111 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_timestamp.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_timestamp-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_timestamp/tst-pam_timestamp0000755000000000000000000000007012160065211020017 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_timestamp.so Linux-PAM-1.1.8/modules/pam_faildelay/0000755000000000000000000000000012216542311014436 500000000000000Linux-PAM-1.1.8/modules/pam_faildelay/pam_faildelay.80000644000000000000000000000455612216527575017267 00000000000000'\" t .\" Title: pam_faildelay .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_FAILDELAY" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_faildelay \- Change the delay on failure per\-application .SH "SYNOPSIS" .HP \w'\fBpam_faildelay\&.so\fR\ 'u \fBpam_faildelay\&.so\fR [debug] [delay=\fImicroseconds\fR] .SH "DESCRIPTION" .PP pam_faildelay is a PAM module that can be used to set the delay on failure per\-application\&. .PP If no \fBdelay\fR is given, pam_faildelay will use the value of FAIL_DELAY from /etc/login\&.defs\&. .SH "OPTIONS" .PP \fBdebug\fR .RS 4 Turns on debugging messages sent to syslog\&. .RE .PP \fBdelay=\fR\fB\fIN\fR\fR .RS 4 Set the delay on failure to N microseconds\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBauth\fR module type is provided\&. .SH "RETURN VALUES" .PP PAM_IGNORE .RS 4 Delay was successful adjusted\&. .RE .PP PAM_SYSTEM_ERR .RS 4 The specified delay was not valid\&. .RE .SH "EXAMPLES" .PP The following example will set the delay on failure to 10 seconds: .sp .if n \{\ .RS 4 .\} .nf auth optional pam_faildelay\&.so delay=10000000 .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBpam_fail_delay\fR(3), \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_faildelay was written by Darren Tucker \&. Linux-PAM-1.1.8/modules/pam_faildelay/pam_faildelay.8.xml0000644000000000000000000000673412160065211020044 00000000000000 pam_faildelay 8 Linux-PAM Manual pam_faildelay Change the delay on failure per-application pam_faildelay.so debug delay=microseconds DESCRIPTION pam_faildelay is a PAM module that can be used to set the delay on failure per-application. If no is given, pam_faildelay will use the value of FAIL_DELAY from /etc/login.defs. OPTIONS Turns on debugging messages sent to syslog. Set the delay on failure to N microseconds. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_IGNORE Delay was successful adjusted. PAM_SYSTEM_ERR The specified delay was not valid. EXAMPLES The following example will set the delay on failure to 10 seconds: auth optional pam_faildelay.so delay=10000000 SEE ALSO pam_fail_delay3 , pam.conf5 , pam.d5 , pam8 AUTHOR pam_faildelay was written by Darren Tucker <dtucker@zip.com.au>. Linux-PAM-1.1.8/modules/pam_faildelay/Makefile.am0000644000000000000000000000136512160065211016414 00000000000000# # Copyright (c) 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_faildelay man_MANS = pam_faildelay.8 XMLS = README.xml pam_faildelay.8.xml TESTS = tst-pam_faildelay securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_faildelay.la pam_faildelay_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_faildelay.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_faildelay/tst-pam_faildelay0000755000000000000000000000007012160065211017675 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_faildelay.so Linux-PAM-1.1.8/modules/pam_faildelay/README0000644000000000000000000000147312216527574015261 00000000000000pam_faildelay — Change the delay on failure per-application ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_faildelay is a PAM module that can be used to set the delay on failure per-application. If no delay is given, pam_faildelay will use the value of FAIL_DELAY from /etc/ login.defs. OPTIONS debug Turns on debugging messages sent to syslog. delay=N Set the delay on failure to N microseconds. EXAMPLES The following example will set the delay on failure to 10 seconds: auth optional pam_faildelay.so delay=10000000 AUTHOR pam_faildelay was written by Darren Tucker . Linux-PAM-1.1.8/modules/pam_faildelay/Makefile.in0000644000000000000000000006022012216527536016437 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_faildelay DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_faildelay_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_faildelay_la_SOURCES = pam_faildelay.c pam_faildelay_la_OBJECTS = pam_faildelay.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_faildelay.c DIST_SOURCES = pam_faildelay.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_faildelay man_MANS = pam_faildelay.8 XMLS = README.xml pam_faildelay.8.xml TESTS = tst-pam_faildelay securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_faildelay.la pam_faildelay_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_faildelay/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_faildelay/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_faildelay.la: $(pam_faildelay_la_OBJECTS) $(pam_faildelay_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_faildelay_la_OBJECTS) $(pam_faildelay_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_faildelay.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_faildelay.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_faildelay/pam_faildelay.c0000644000000000000000000001361512160065211017314 00000000000000/* pam_faildelay module */ /* * Allows an admin to set the delay on failure per-application. * Provides "auth" interface only. * * Use by putting something like this in the relevant pam config: * auth required pam_faildelay.so delay=[microseconds] * * eg: * auth required pam_faildelay.so delay=10000000 * will set the delay on failure to 10 seconds. * * If no delay option was given, pam_faildelay.so will use the * FAIL_DELAY value of /etc/login.defs. * * Based on pam_rootok and parts of pam_unix both by Andrew Morgan * * * Copyright (c) 2006 Thorsten Kukuk * - Rewrite to use extended PAM functions * - Add /etc/login.defs support * * Portions Copyright (c) 2005 Darren Tucker . * * Redistribution and use in source and binary forms of, with * or without modification, are permitted provided that the following * conditions are met: * * 1. Redistributions of source code must retain any existing copyright * notice, and this entire permission notice in its entirety, * including the disclaimer of warranties. * * 2. Redistributions in binary form must reproduce all prior and current * copyright notices, this list of conditions, and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * 3. The name of any author may not be used to endorse or promote * products derived from this software without their specific prior * written permission. * * ALTERNATIVELY, this product may be distributed under the terms of the * GNU General Public License, in which case the provisions of the GNU * GPL are required INSTEAD OF the above restrictions. (This clause is * necessary due to a potential conflict between the GNU 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(S) 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. */ #include "config.h" #include #include #include #include #include #include #include #include #define PAM_SM_AUTH #include #include #define BUF_SIZE 8192 #define LOGIN_DEFS "/etc/login.defs" static char * search_key (const char *filename) { FILE *fp; char *buf = NULL; size_t buflen = 0; char *retval = NULL; fp = fopen (filename, "r"); if (NULL == fp) return NULL; 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 = BUF_SIZE; buf = malloc (buflen); } buf[0] = '\0'; if (fgets (buf, buflen - 1, fp) == NULL) break; else 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; if (strcasecmp (tmp, "FAIL_DELAY") == 0) { retval = strdup (cp); break; } } fclose (fp); free (buf); return retval; } /* --- authentication management functions (only) --- */ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int i, debug_flag = 0; long int delay = -1; /* step through arguments */ for (i = 0; i < argc; i++) { if (sscanf(argv[i], "delay=%ld", &delay) == 1) { /* sscanf did already everything necessary */ } else if (strcmp (argv[i], "debug") == 0) debug_flag = 1; else pam_syslog (pamh, LOG_ERR, "unknown option; %s", argv[i]); } if (delay == -1) { char *endptr; char *val = search_key (LOGIN_DEFS); const char *val_orig = val; if (val == NULL) return PAM_IGNORE; errno = 0; delay = strtol (val, &endptr, 10) & 0777; if (((delay == 0) && (val_orig == endptr)) || ((delay == LONG_MIN || delay == LONG_MAX) && (errno == ERANGE))) { pam_syslog (pamh, LOG_ERR, "FAIL_DELAY=%s in %s not valid", val, LOGIN_DEFS); free (val); return PAM_IGNORE; } free (val); /* delay is in seconds, convert to microseconds. */ delay *= 1000000; } if (debug_flag) pam_syslog (pamh, LOG_DEBUG, "setting fail delay to %ld", delay); i = pam_fail_delay(pamh, delay); if (i == PAM_SUCCESS) return PAM_IGNORE; else return i; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_IGNORE; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_faildelay_modstruct = { "pam_faildelay", pam_sm_authenticate, pam_sm_setcred, NULL, NULL, NULL, NULL, }; #endif /* end of module definition */ Linux-PAM-1.1.8/modules/pam_faildelay/README.xml0000644000000000000000000000225612160065211016037 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_faildelay.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_faildelay-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_limits/0000755000000000000000000000000012216542311014005 500000000000000Linux-PAM-1.1.8/modules/pam_limits/tst-pam_limits0000755000000000000000000000006512160065211016617 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_limits.so Linux-PAM-1.1.8/modules/pam_limits/limits.conf.50000644000000000000000000001734712216527600016260 00000000000000'\" t .\" Title: limits.conf .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "LIMITS\&.CONF" "5" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" limits.conf \- configuration file for the pam_limits module .SH "DESCRIPTION" .PP The \fIpam_limits\&.so\fR module applies ulimit limits, nice priority and number of simultaneous login sessions limit to user login sessions\&. This description of the configuration file syntax applies to the /etc/security/limits\&.conf file and *\&.conf files in the /etc/security/limits\&.d directory\&. .PP The syntax of the lines is as follows: .PP \fI\fR\fI\fR\fI\fR\fI\fR .PP The fields listed above should be filled as follows: .PP \fB\fR .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} a username .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} a groupname, with \fB@group\fR syntax\&. This should not be confused with netgroups\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} the wildcard \fB*\fR, for default entry\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} the wildcard \fB%\fR, for maxlogins limit only, can also be used with \fB%group\fR syntax\&. If the \fB%\fR wildcard is used alone it is identical to using \fB*\fR with maxsyslogins limit\&. With a group specified after \fB%\fR it limits the total number of logins of all users that are member of the group\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} an uid range specified as \fI\fR\fB:\fR\fI\fR\&. If min_uid is omitted, the match is exact for the max_uid\&. If max_uid is omitted, all uids greater than or equal min_uid match\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} a gid range specified as \fB@\fR\fI\fR\fB:\fR\fI\fR\&. If min_gid is omitted, the match is exact for the max_gid\&. If max_gid is omitted, all gids greater than or equal min_gid match\&. For the exact match all groups including the user\*(Aqs supplementary groups are examined\&. For the range matches only the user\*(Aqs primary group is examined\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} a gid specified as \fB%:\fR\fI\fR applicable to maxlogins limit only\&. It limits the total number of logins of all users that are member of the group with the specified gid\&. .RE .RE .PP \fB\fR .RS 4 .PP \fBhard\fR .RS 4 for enforcing \fBhard\fR resource limits\&. These limits are set by the superuser and enforced by the Kernel\&. The user cannot raise his requirement of system resources above such values\&. .RE .PP \fBsoft\fR .RS 4 for enforcing \fBsoft\fR resource limits\&. These limits are ones that the user can move up or down within the permitted range by any pre\-existing \fBhard\fR limits\&. The values specified with this token can be thought of as \fIdefault\fR values, for normal system usage\&. .RE .PP \fB\-\fR .RS 4 for enforcing both \fBsoft\fR and \fBhard\fR resource limits together\&. .sp Note, if you specify a type of \*(Aq\-\*(Aq but neglect to supply the item and value fields then the module will never enforce any limits on the specified user/group etc\&. \&. .RE .RE .PP \fB\fR .RS 4 .PP \fBcore\fR .RS 4 limits the core file size (KB) .RE .PP \fBdata\fR .RS 4 maximum data size (KB) .RE .PP \fBfsize\fR .RS 4 maximum filesize (KB) .RE .PP \fBmemlock\fR .RS 4 maximum locked\-in\-memory address space (KB) .RE .PP \fBnofile\fR .RS 4 maximum number of open files .RE .PP \fBrss\fR .RS 4 maximum resident set size (KB) (Ignored in Linux 2\&.4\&.30 and higher) .RE .PP \fBstack\fR .RS 4 maximum stack size (KB) .RE .PP \fBcpu\fR .RS 4 maximum CPU time (minutes) .RE .PP \fBnproc\fR .RS 4 maximum number of processes .RE .PP \fBas\fR .RS 4 address space limit (KB) .RE .PP \fBmaxlogins\fR .RS 4 maximum number of logins for this user except for this with \fIuid=0\fR .RE .PP \fBmaxsyslogins\fR .RS 4 maximum number of all logins on system .RE .PP \fBpriority\fR .RS 4 the priority to run user process with (negative values boost process priority) .RE .PP \fBlocks\fR .RS 4 maximum locked files (Linux 2\&.4 and higher) .RE .PP \fBsigpending\fR .RS 4 maximum number of pending signals (Linux 2\&.6 and higher) .RE .PP \fBmsgqueue\fR .RS 4 maximum memory used by POSIX message queues (bytes) (Linux 2\&.6 and higher) .RE .PP \fBnice\fR .RS 4 maximum nice priority allowed to raise to (Linux 2\&.6\&.12 and higher) values: [\-20,19] .RE .PP \fBrtprio\fR .RS 4 maximum realtime priority allowed for non\-privileged processes (Linux 2\&.6\&.12 and higher) .RE .RE .PP All items support the values \fI\-1\fR, \fIunlimited\fR or \fIinfinity\fR indicating no limit, except for \fBpriority\fR and \fBnice\fR\&. .PP If a hard limit or soft limit of a resource is set to a valid value, but outside of the supported range of the local system, the system may reject the new limit or unexpected behavior may occur\&. If the control value \fIrequired\fR is used, the module will reject the login if a limit could not be set\&. .PP In general, individual limits have priority over group limits, so if you impose no limits for \fIadmin\fR group, but one of the members in this group have a limits line, the user will have its limits set according to this line\&. .PP Also, please note that all limit settings are set \fIper login\fR\&. They are not global, nor are they permanent; existing only for the duration of the session\&. One exception is the \fImaxlogin\fR option, this one is system wide\&. But there is a race, concurrent logins at the same time will not always be detect as such but only counted as one\&. .PP In the \fIlimits\fR configuration file, the \*(Aq\fB#\fR\*(Aq character introduces a comment \- after which the rest of the line is ignored\&. .PP The pam_limits module does report configuration problems found in its configuration file and errors via \fBsyslog\fR(3)\&. .SH "EXAMPLES" .PP These are some example lines which might be specified in /etc/security/limits\&.conf\&. .sp .if n \{\ .RS 4 .\} .nf * soft core 0 * hard nofile 512 @student hard nproc 20 @faculty soft nproc 20 @faculty hard nproc 50 ftp hard nproc 0 @student \- maxlogins 4 :123 hard cpu 5000 @500: soft cpu 10000 600:700 hard locks 10 .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBpam_limits\fR(8), \fBpam.d\fR(5), \fBpam\fR(8), \fBgetrlimit\fR(2)\fBgetrlimit\fR(3p) .SH "AUTHOR" .PP pam_limits was initially written by Cristian Gafton Linux-PAM-1.1.8/modules/pam_limits/pam_limits.8.xml0000644000000000000000000001611012160065211016747 00000000000000 pam_limits 8 Linux-PAM Manual pam_limits PAM module to limit resources pam_limits.so conf=/path/to/limits.conf debug set_all utmp_early noaudit DESCRIPTION The pam_limits PAM module sets limits on the system resources that can be obtained in a user-session. Users of uid=0 are affected by this limits, too. By default limits are taken from the /etc/security/limits.conf config file. Then individual *.conf files from the /etc/security/limits.d/ directory are read. The files are parsed one after another in the order of "C" locale. The effect of the individual files is the same as if all the files were concatenated together in the order of parsing. If a config file is explicitly specified with a module option then the files in the above directory are not parsed. The module must not be called by a multithreaded application. If Linux PAM is compiled with audit support the module will report when it denies access based on limit of maximum number of concurrent login sessions. OPTIONS Indicate an alternative limits.conf style configuration file to override the default. Print debug information. Set the limits for which no value is specified in the configuration file to the one from the process with the PID 1. Some broken applications actually allocate a utmp entry for the user before the user is admitted to the system. If some of the services you are configuring PAM for do this, you can selectively use this module argument to compensate for this behavior and at the same time maintain system-wide consistency with a single limits.conf file. Do not report exceeded maximum logins count to the audit subsystem. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_ABORT Cannot get current limits. PAM_IGNORE No limits found for this user. PAM_PERM_DENIED New limits could not be set. PAM_SERVICE_ERR Cannot read config file. PAM_SESSION_ERR Error recovering account name. PAM_SUCCESS Limits were changed. PAM_USER_UNKNOWN The user is not known to the system. FILES /etc/security/limits.conf Default configuration file EXAMPLES For the services you need resources limits (login for example) put a the following line in /etc/pam.d/login as the last line for that service (usually after the pam_unix session line): #%PAM-1.0 # # Resource limits imposed on login sessions via pam_limits # session required pam_limits.so Replace "login" for each service you are using this module. SEE ALSO limits.conf5 , pam.d5 , pam8 . AUTHORS pam_limits was initially written by Cristian Gafton <gafton@redhat.com> Linux-PAM-1.1.8/modules/pam_limits/pam_limits.c0000644000000000000000000007634012160065211016236 00000000000000/* * pam_limits - impose resource limits when opening a user session * * 1.6 - modified for PLD (added process priority settings) * by Marcin Korzonek * 1.5 - Elliot Lee's "max system logins patch" * 1.4 - addressed bug in configuration file parser * 1.3 - modified the configuration file format * 1.2 - added 'debug' and 'conf=' arguments * 1.1 - added @group support * 1.0 - initial release - Linux ONLY * * See end for Copyright information */ #if !defined(linux) && !defined(__linux) #warning THIS CODE IS KNOWN TO WORK ONLY ON LINUX !!! #endif #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef UT_USER /* some systems have ut_name instead of ut_user */ #define UT_USER ut_user #endif #include #include #include #ifdef HAVE_LIBAUDIT #include #endif /* Module defines */ #define LINE_LENGTH 1024 #define LIMITS_DEF_USER 0 /* limit was set by an user entry */ #define LIMITS_DEF_GROUP 1 /* limit was set by a group entry */ #define LIMITS_DEF_ALLGROUP 2 /* limit was set by a group entry */ #define LIMITS_DEF_ALL 3 /* limit was set by an all entry */ #define LIMITS_DEF_DEFAULT 4 /* limit was set by a default entry */ #define LIMITS_DEF_KERNEL 5 /* limit was set from /proc/1/limits */ #define LIMITS_DEF_NONE 6 /* this limit was not set yet */ #define LIMIT_RANGE_ERR -1 /* error in specified uid/gid range */ #define LIMIT_RANGE_NONE 0 /* no range specified */ #define LIMIT_RANGE_ONE 1 /* exact uid/gid specified (:max_uid)*/ #define LIMIT_RANGE_MIN 2 /* only minimum uid/gid specified (min_uid:) */ #define LIMIT_RANGE_MM 3 /* both min and max uid/gid specified (min_uid:max_uid) */ static const char *limits_def_names[] = { "USER", "GROUP", "ALLGROUP", "ALL", "DEFAULT", "KERNEL", "NONE", NULL }; struct user_limits_struct { int supported; int src_soft; int src_hard; struct rlimit limit; }; /* internal data */ struct pam_limit_s { int login_limit; /* the max logins limit */ int login_limit_def; /* which entry set the login limit */ int flag_numsyslogins; /* whether to limit logins only for a specific user or to count all logins */ int priority; /* the priority to run user process with */ struct user_limits_struct limits[RLIM_NLIMITS]; const char *conf_file; int utmp_after_pam_call; char login_group[LINE_LENGTH]; }; #define LIMIT_LOGIN RLIM_NLIMITS+1 #define LIMIT_NUMSYSLOGINS RLIM_NLIMITS+2 #define LIMIT_PRI RLIM_NLIMITS+3 #define LIMIT_SOFT 1 #define LIMIT_HARD 2 #define PAM_SM_SESSION #include #include #include #include /* argument parsing */ #define PAM_DEBUG_ARG 0x0001 #define PAM_UTMP_EARLY 0x0004 #define PAM_NO_AUDIT 0x0008 #define PAM_SET_ALL 0x0010 /* Limits from globbed files. */ #define LIMITS_CONF_GLOB LIMITS_FILE_DIR #define CONF_FILE (pl->conf_file != NULL)?pl->conf_file:LIMITS_FILE static int _pam_parse (const pam_handle_t *pamh, int argc, const char **argv, struct pam_limit_s *pl) { int ctrl=0; /* step through arguments */ for (ctrl=0; argc-- > 0; ++argv) { /* generic options */ if (!strcmp(*argv,"debug")) { ctrl |= PAM_DEBUG_ARG; } else if (!strncmp(*argv,"conf=",5)) { pl->conf_file = *argv+5; } else if (!strcmp(*argv,"utmp_early")) { ctrl |= PAM_UTMP_EARLY; } else if (!strcmp(*argv,"noaudit")) { ctrl |= PAM_NO_AUDIT; } else if (!strcmp(*argv,"set_all")) { ctrl |= PAM_SET_ALL; } else { pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } } return ctrl; } static const char * rlimit2str (int i) { switch (i) { case RLIMIT_CPU: return "cpu"; break; case RLIMIT_FSIZE: return "fsize"; break; case RLIMIT_DATA: return "data"; break; case RLIMIT_STACK: return "stack"; break; case RLIMIT_CORE: return "core"; break; case RLIMIT_RSS: return "rss"; break; case RLIMIT_NPROC: return "nproc"; break; case RLIMIT_NOFILE: return "nofile"; break; case RLIMIT_MEMLOCK: return "memlock"; break; #ifdef RLIMIT_AS case RLIMIT_AS: return "as"; break; #endif #ifdef RLIMIT_LOCKS case RLIMIT_LOCKS: return "locks"; break; #endif #ifdef RLIMIT_SIGPENDING case RLIMIT_SIGPENDING: return "sigpending"; break; #endif #ifdef RLIMIT_MSGQUEUE case RLIMIT_MSGQUEUE: return "msgqueue"; break; #endif #ifdef RLIMIT_NICE case RLIMIT_NICE: return "nice"; break; #endif #ifdef RLIMIT_RTPRIO case RLIMIT_RTPRIO: return "rtprio"; break; #endif default: return "UNKNOWN"; break; } } #define LIMITED_OK 0 /* limit setting appeared to work */ #define LIMIT_ERR 1 /* error setting a limit */ #define LOGIN_ERR 2 /* too many logins err */ /* Counts the number of user logins and check against the limit*/ static int check_logins (pam_handle_t *pamh, const char *name, int limit, int ctrl, struct pam_limit_s *pl) { struct utmp *ut; int count; if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "checking logins for '%s' (maximum of %d)", name, limit); } if (limit < 0) return 0; /* no limits imposed */ if (limit == 0) /* maximum 0 logins ? */ { pam_syslog(pamh, LOG_WARNING, "No logins allowed for '%s'", name); return LOGIN_ERR; } setutent(); /* Because there is no definition about when an application actually adds a utmp entry, some applications bizarrely do the utmp call before the have PAM authenticate them to the system: you're logged it, sort of...? Anyway, you can use the "utmp_early" module argument in your PAM config file to make allowances for this sort of problem. (There should be a PAM standard for this, since if a module wants to actually map a username then any early utmp entry will be for the unmapped name = broken.) */ if (ctrl & PAM_UTMP_EARLY) { count = 0; } else { count = 1; } while((ut = getutent())) { #ifdef USER_PROCESS if (ut->ut_type != USER_PROCESS) { continue; } #endif if (ut->UT_USER[0] == '\0') { continue; } if (!pl->flag_numsyslogins) { if (((pl->login_limit_def == LIMITS_DEF_USER) || (pl->login_limit_def == LIMITS_DEF_GROUP) || (pl->login_limit_def == LIMITS_DEF_DEFAULT)) && strncmp(name, ut->UT_USER, sizeof(ut->UT_USER)) != 0) { continue; } if ((pl->login_limit_def == LIMITS_DEF_ALLGROUP) && !pam_modutil_user_in_group_nam_nam(pamh, ut->UT_USER, pl->login_group)) { continue; } } if (++count > limit) { break; } } endutent(); if (count > limit) { if (name) { pam_syslog(pamh, LOG_WARNING, "Too many logins (max %d) for %s", limit, name); } else { pam_syslog(pamh, LOG_WARNING, "Too many system logins (max %d)", limit); } return LOGIN_ERR; } return 0; } static const char *lnames[RLIM_NLIMITS] = { [RLIMIT_CPU] = "Max cpu time", [RLIMIT_FSIZE] = "Max file size", [RLIMIT_DATA] = "Max data size", [RLIMIT_STACK] = "Max stack size", [RLIMIT_CORE] = "Max core file size", [RLIMIT_RSS] = "Max resident set", [RLIMIT_NPROC] = "Max processes", [RLIMIT_NOFILE] = "Max open files", [RLIMIT_MEMLOCK] = "Max locked memory", #ifdef RLIMIT_AS [RLIMIT_AS] = "Max address space", #endif #ifdef RLIMIT_LOCKS [RLIMIT_LOCKS] = "Max file locks", #endif #ifdef RLIMIT_SIGPENDING [RLIMIT_SIGPENDING] = "Max pending signals", #endif #ifdef RLIMIT_MSGQUEUE [RLIMIT_MSGQUEUE] = "Max msgqueue size", #endif #ifdef RLIMIT_NICE [RLIMIT_NICE] = "Max nice priority", #endif #ifdef RLIMIT_RTPRIO [RLIMIT_RTPRIO] = "Max realtime priority", #endif #ifdef RLIMIT_RTTIME [RLIMIT_RTTIME] = "Max realtime timeout", #endif }; static int str2rlimit(char *name) { int i; if (!name || *name == '\0') return -1; for(i = 0; i < RLIM_NLIMITS; i++) { if (strcmp(name, lnames[i]) == 0) return i; } return -1; } static rlim_t str2rlim_t(char *value) { unsigned long long rlimit = 0; if (!value) return (rlim_t)rlimit; if (strcmp(value, "unlimited") == 0) { return RLIM_INFINITY; } rlimit = strtoull(value, NULL, 10); return (rlim_t)rlimit; } #define LIMITS_SKIP_WHITESPACE { \ /* step backwards over spaces */ \ pos--; \ while (pos && line[pos] == ' ') pos--; \ if (!pos) continue; \ line[pos+1] = '\0'; \ } #define LIMITS_MARK_ITEM(item) { \ /* step backwards over non-spaces */ \ pos--; \ while (pos && line[pos] != ' ') pos--; \ if (!pos) continue; \ item = line + pos + 1; \ } static void parse_kernel_limits(pam_handle_t *pamh, struct pam_limit_s *pl, int ctrl) { int i, maxlen = 0; FILE *limitsfile; const char *proclimits = "/proc/1/limits"; char line[256]; char *units, *hard, *soft, *name; if (!(limitsfile = fopen(proclimits, "r"))) { pam_syslog(pamh, LOG_WARNING, "Could not read %s (%s), using PAM defaults", proclimits, strerror(errno)); return; } while (fgets(line, 256, limitsfile)) { int pos = strlen(line); if (pos < 2) continue; /* drop trailing newline */ if (line[pos-1] == '\n') { pos--; line[pos] = '\0'; } /* determine formatting boundry of limits report */ if (!maxlen && strncmp(line, "Limit", 5) == 0) { maxlen = pos; continue; } if (pos == maxlen) { /* step backwards over "Units" name */ LIMITS_SKIP_WHITESPACE; LIMITS_MARK_ITEM(units); } else { units = ""; } /* step backwards over "Hard Limit" value */ LIMITS_SKIP_WHITESPACE; LIMITS_MARK_ITEM(hard); /* step backwards over "Soft Limit" value */ LIMITS_SKIP_WHITESPACE; LIMITS_MARK_ITEM(soft); /* step backwards over name of limit */ LIMITS_SKIP_WHITESPACE; name = line; i = str2rlimit(name); if (i < 0 || i >= RLIM_NLIMITS) { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_DEBUG, "Unknown kernel rlimit '%s' ignored", name); continue; } pl->limits[i].limit.rlim_cur = str2rlim_t(soft); pl->limits[i].limit.rlim_max = str2rlim_t(hard); pl->limits[i].src_soft = LIMITS_DEF_KERNEL; pl->limits[i].src_hard = LIMITS_DEF_KERNEL; } fclose(limitsfile); } static int init_limits(pam_handle_t *pamh, struct pam_limit_s *pl, int ctrl) { int i; int retval = PAM_SUCCESS; D(("called.")); for(i = 0; i < RLIM_NLIMITS; i++) { int r = getrlimit(i, &pl->limits[i].limit); if (r == -1) { pl->limits[i].supported = 0; if (errno != EINVAL) { retval = !PAM_SUCCESS; } } else { pl->limits[i].supported = 1; pl->limits[i].src_soft = LIMITS_DEF_NONE; pl->limits[i].src_hard = LIMITS_DEF_NONE; } } #ifdef __linux__ if (ctrl & PAM_SET_ALL) { parse_kernel_limits(pamh, pl, ctrl); for(i = 0; i < RLIM_NLIMITS; i++) { if (pl->limits[i].supported && (pl->limits[i].src_soft == LIMITS_DEF_NONE || pl->limits[i].src_hard == LIMITS_DEF_NONE)) { pam_syslog(pamh, LOG_WARNING, "Did not find kernel RLIMIT for %s, using PAM default", rlimit2str(i)); } } } #endif errno = 0; pl->priority = getpriority (PRIO_PROCESS, 0); if (pl->priority == -1 && errno != 0) retval = !PAM_SUCCESS; pl->login_limit = -2; pl->login_limit_def = LIMITS_DEF_NONE; return retval; } static void process_limit (const pam_handle_t *pamh, int source, const char *lim_type, const char *lim_item, const char *lim_value, int ctrl, struct pam_limit_s *pl) { int limit_item; int limit_type = 0; int int_value = 0; rlim_t rlimit_value = 0; char *endptr; const char *value_orig = lim_value; if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_DEBUG, "%s: processing %s %s %s for %s", __FUNCTION__, lim_type, lim_item, lim_value, limits_def_names[source]); if (strcmp(lim_item, "cpu") == 0) limit_item = RLIMIT_CPU; else if (strcmp(lim_item, "fsize") == 0) limit_item = RLIMIT_FSIZE; else if (strcmp(lim_item, "data") == 0) limit_item = RLIMIT_DATA; else if (strcmp(lim_item, "stack") == 0) limit_item = RLIMIT_STACK; else if (strcmp(lim_item, "core") == 0) limit_item = RLIMIT_CORE; else if (strcmp(lim_item, "rss") == 0) limit_item = RLIMIT_RSS; else if (strcmp(lim_item, "nproc") == 0) limit_item = RLIMIT_NPROC; else if (strcmp(lim_item, "nofile") == 0) limit_item = RLIMIT_NOFILE; else if (strcmp(lim_item, "memlock") == 0) limit_item = RLIMIT_MEMLOCK; #ifdef RLIMIT_AS else if (strcmp(lim_item, "as") == 0) limit_item = RLIMIT_AS; #endif /*RLIMIT_AS*/ #ifdef RLIMIT_LOCKS else if (strcmp(lim_item, "locks") == 0) limit_item = RLIMIT_LOCKS; #endif #ifdef RLIMIT_SIGPENDING else if (strcmp(lim_item, "sigpending") == 0) limit_item = RLIMIT_SIGPENDING; #endif #ifdef RLIMIT_MSGQUEUE else if (strcmp(lim_item, "msgqueue") == 0) limit_item = RLIMIT_MSGQUEUE; #endif #ifdef RLIMIT_NICE else if (strcmp(lim_item, "nice") == 0) limit_item = RLIMIT_NICE; #endif #ifdef RLIMIT_RTPRIO else if (strcmp(lim_item, "rtprio") == 0) limit_item = RLIMIT_RTPRIO; #endif else if (strcmp(lim_item, "maxlogins") == 0) { limit_item = LIMIT_LOGIN; pl->flag_numsyslogins = 0; } else if (strcmp(lim_item, "maxsyslogins") == 0) { limit_item = LIMIT_NUMSYSLOGINS; pl->flag_numsyslogins = 1; } else if (strcmp(lim_item, "priority") == 0) { limit_item = LIMIT_PRI; } else { pam_syslog(pamh, LOG_DEBUG, "unknown limit item '%s'", lim_item); return; } if (strcmp(lim_type,"soft")==0) limit_type=LIMIT_SOFT; else if (strcmp(lim_type, "hard")==0) limit_type=LIMIT_HARD; else if (strcmp(lim_type,"-")==0) limit_type=LIMIT_SOFT | LIMIT_HARD; else if (limit_item != LIMIT_LOGIN && limit_item != LIMIT_NUMSYSLOGINS) { pam_syslog(pamh, LOG_DEBUG, "unknown limit type '%s'", lim_type); return; } if (limit_item != LIMIT_PRI #ifdef RLIMIT_NICE && limit_item != RLIMIT_NICE #endif && (strcmp(lim_value, "-1") == 0 || strcmp(lim_value, "-") == 0 || strcmp(lim_value, "unlimited") == 0 || strcmp(lim_value, "infinity") == 0)) { int_value = -1; rlimit_value = RLIM_INFINITY; } else if (limit_item == LIMIT_PRI || limit_item == LIMIT_LOGIN || #ifdef RLIMIT_NICE limit_item == RLIMIT_NICE || #endif limit_item == LIMIT_NUMSYSLOGINS) { long temp; temp = strtol (lim_value, &endptr, 10); temp = temp < INT_MAX ? temp : INT_MAX; int_value = temp > INT_MIN ? temp : INT_MIN; if (int_value == 0 && value_orig == endptr) { pam_syslog(pamh, LOG_DEBUG, "wrong limit value '%s' for limit type '%s'", lim_value, lim_type); return; } } else { #ifdef __USE_FILE_OFFSET64 rlimit_value = strtoull (lim_value, &endptr, 10); #else rlimit_value = strtoul (lim_value, &endptr, 10); #endif if (rlimit_value == 0 && value_orig == endptr) { pam_syslog(pamh, LOG_DEBUG, "wrong limit value '%s' for limit type '%s'", lim_value, lim_type); return; } } /* one more special case when limiting logins */ if ((source == LIMITS_DEF_ALL || source == LIMITS_DEF_ALLGROUP) && (limit_item != LIMIT_LOGIN)) { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_DEBUG, "'%%' domain valid for maxlogins type only"); return; } switch(limit_item) { case RLIMIT_CPU: if (rlimit_value != RLIM_INFINITY) { if (rlimit_value >= RLIM_INFINITY/60) rlimit_value = RLIM_INFINITY; else rlimit_value *= 60; } break; case RLIMIT_FSIZE: case RLIMIT_DATA: case RLIMIT_STACK: case RLIMIT_CORE: case RLIMIT_RSS: case RLIMIT_MEMLOCK: #ifdef RLIMIT_AS case RLIMIT_AS: #endif if (rlimit_value != RLIM_INFINITY) { if (rlimit_value >= RLIM_INFINITY/1024) rlimit_value = RLIM_INFINITY; else rlimit_value *= 1024; } break; #ifdef RLIMIT_NICE case RLIMIT_NICE: if (int_value > 19) int_value = 19; if (int_value < -20) int_value = -20; rlimit_value = 20 - int_value; break; #endif } if ( (limit_item != LIMIT_LOGIN) && (limit_item != LIMIT_NUMSYSLOGINS) && (limit_item != LIMIT_PRI) ) { if (limit_type & LIMIT_SOFT) { if (pl->limits[limit_item].src_soft < source) { return; } else { pl->limits[limit_item].limit.rlim_cur = rlimit_value; pl->limits[limit_item].src_soft = source; } } if (limit_type & LIMIT_HARD) { if (pl->limits[limit_item].src_hard < source) { return; } else { pl->limits[limit_item].limit.rlim_max = rlimit_value; pl->limits[limit_item].src_hard = source; } } } else { /* recent kernels support negative priority limits (=raise priority) */ if (limit_item == LIMIT_PRI) { pl->priority = int_value; } else { if (pl->login_limit_def < source) { return; } else { pl->login_limit = int_value; pl->login_limit_def = source; } } } return; } static int parse_uid_range(pam_handle_t *pamh, const char *domain, uid_t *min_uid, uid_t *max_uid) { const char *range = domain; char *pmax; char *endptr; int rv = LIMIT_RANGE_MM; if ((pmax=strchr(range, ':')) == NULL) return LIMIT_RANGE_NONE; ++pmax; if (range[0] == '@' || range[0] == '%') ++range; if (range[0] == ':') rv = LIMIT_RANGE_ONE; else { errno = 0; *min_uid = strtoul (range, &endptr, 10); if (errno != 0 || (range == endptr) || *endptr != ':') { pam_syslog(pamh, LOG_DEBUG, "wrong min_uid/gid value in '%s'", domain); return LIMIT_RANGE_ERR; } } if (*pmax == '\0') { if (rv == LIMIT_RANGE_ONE) return LIMIT_RANGE_ERR; else return LIMIT_RANGE_MIN; } errno = 0; *max_uid = strtoul (pmax, &endptr, 10); if (errno != 0 || (pmax == endptr) || *endptr != '\0') { pam_syslog(pamh, LOG_DEBUG, "wrong max_uid/gid value in '%s'", domain); return LIMIT_RANGE_ERR; } if (rv == LIMIT_RANGE_ONE) *min_uid = *max_uid; return rv; } static int parse_config_file(pam_handle_t *pamh, const char *uname, uid_t uid, gid_t gid, int ctrl, struct pam_limit_s *pl) { FILE *fil; char buf[LINE_LENGTH]; /* check for the LIMITS_FILE */ if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_DEBUG, "reading settings from '%s'", CONF_FILE); fil = fopen(CONF_FILE, "r"); if (fil == NULL) { pam_syslog (pamh, LOG_WARNING, "cannot read settings from %s: %m", CONF_FILE); return PAM_SERVICE_ERR; } /* start the show */ while (fgets(buf, LINE_LENGTH, fil) != NULL) { char domain[LINE_LENGTH]; char ltype[LINE_LENGTH]; char item[LINE_LENGTH]; char value[LINE_LENGTH]; int i; int rngtype; size_t j; char *tptr,*line; uid_t min_uid = (uid_t)-1, max_uid = (uid_t)-1; line = buf; /* skip the leading white space */ while (*line && isspace(*line)) line++; /* Rip off the comments */ tptr = strchr(line,'#'); if (tptr) *tptr = '\0'; /* Rip off the newline char */ tptr = strchr(line,'\n'); if (tptr) *tptr = '\0'; /* Anything left ? */ if (!strlen(line)) continue; domain[0] = ltype[0] = item[0] = value[0] = '\0'; i = sscanf(line,"%s%s%s%s", domain, ltype, item, value); D(("scanned line[%d]: domain[%s], ltype[%s], item[%s], value[%s]", i, domain, ltype, item, value)); for(j=0; j < strlen(ltype); j++) ltype[j]=tolower(ltype[j]); if ((rngtype=parse_uid_range(pamh, domain, &min_uid, &max_uid)) < 0) { pam_syslog(pamh, LOG_WARNING, "invalid uid range '%s' - skipped", domain); continue; } if (i == 4) { /* a complete line */ for(j=0; j < strlen(item); j++) item[j]=tolower(item[j]); for(j=0; j < strlen(value); j++) value[j]=tolower(value[j]); if (strcmp(uname, domain) == 0) /* this user have a limit */ process_limit(pamh, LIMITS_DEF_USER, ltype, item, value, ctrl, pl); else if (domain[0]=='@') { if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "checking if %s is in group %s", uname, domain + 1); } switch(rngtype) { case LIMIT_RANGE_NONE: if (pam_modutil_user_in_group_nam_nam(pamh, uname, domain+1)) process_limit(pamh, LIMITS_DEF_GROUP, ltype, item, value, ctrl, pl); break; case LIMIT_RANGE_ONE: if (pam_modutil_user_in_group_nam_gid(pamh, uname, (gid_t)max_uid)) process_limit(pamh, LIMITS_DEF_GROUP, ltype, item, value, ctrl, pl); break; case LIMIT_RANGE_MM: if (gid > (gid_t)max_uid) break; /* fallthrough */ case LIMIT_RANGE_MIN: if (gid >= (gid_t)min_uid) process_limit(pamh, LIMITS_DEF_GROUP, ltype, item, value, ctrl, pl); } } else if (domain[0]=='%') { if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "checking if %s is in group %s", uname, domain + 1); } switch(rngtype) { case LIMIT_RANGE_NONE: if (strcmp(domain,"%") == 0) process_limit(pamh, LIMITS_DEF_ALL, ltype, item, value, ctrl, pl); else if (pam_modutil_user_in_group_nam_nam(pamh, uname, domain+1)) { strcpy(pl->login_group, domain+1); process_limit(pamh, LIMITS_DEF_ALLGROUP, ltype, item, value, ctrl, pl); } break; case LIMIT_RANGE_ONE: if (pam_modutil_user_in_group_nam_gid(pamh, uname, (gid_t)max_uid)) { struct group *grp; grp = pam_modutil_getgrgid(pamh, (gid_t)max_uid); strncpy(pl->login_group, grp->gr_name, sizeof(pl->login_group)); pl->login_group[sizeof(pl->login_group)-1] = '\0'; process_limit(pamh, LIMITS_DEF_ALLGROUP, ltype, item, value, ctrl, pl); } break; case LIMIT_RANGE_MIN: case LIMIT_RANGE_MM: pam_syslog(pamh, LOG_WARNING, "range unsupported for %%group matching - ignored"); } } else { switch(rngtype) { case LIMIT_RANGE_NONE: if (strcmp(domain, "*") == 0) process_limit(pamh, LIMITS_DEF_DEFAULT, ltype, item, value, ctrl, pl); break; case LIMIT_RANGE_ONE: if (uid != max_uid) break; /* fallthrough */ case LIMIT_RANGE_MM: if (uid > max_uid) break; /* fallthrough */ case LIMIT_RANGE_MIN: if (uid >= min_uid) process_limit(pamh, LIMITS_DEF_USER, ltype, item, value, ctrl, pl); } } } else if (i == 2 && ltype[0] == '-') { /* Probably a no-limit line */ if (strcmp(uname, domain) == 0) { if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "no limits for '%s'", uname); } } else if (domain[0] == '@') { switch(rngtype) { case LIMIT_RANGE_NONE: if (!pam_modutil_user_in_group_nam_nam(pamh, uname, domain+1)) continue; /* next line */ break; case LIMIT_RANGE_ONE: if (!pam_modutil_user_in_group_nam_gid(pamh, uname, (gid_t)max_uid)) continue; /* next line */ break; case LIMIT_RANGE_MM: if (gid > (gid_t)max_uid) continue; /* next line */ /* fallthrough */ case LIMIT_RANGE_MIN: if (gid < (gid_t)min_uid) continue; /* next line */ } if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "no limits for '%s' in group '%s'", uname, domain+1); } } else { switch(rngtype) { case LIMIT_RANGE_NONE: continue; /* next line */ case LIMIT_RANGE_ONE: if (uid != max_uid) continue; /* next line */ break; case LIMIT_RANGE_MM: if (uid > max_uid) continue; /* next line */ /* fallthrough */ case LIMIT_RANGE_MIN: if (uid >= min_uid) break; continue; /* next line */ } if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "no limits for '%s'", uname); } } fclose(fil); return PAM_IGNORE; } else { pam_syslog(pamh, LOG_WARNING, "invalid line '%s' - skipped", line); } } fclose(fil); return PAM_SUCCESS; } static int setup_limits(pam_handle_t *pamh, const char *uname, uid_t uid, int ctrl, struct pam_limit_s *pl) { int i; int status; int retval = LIMITED_OK; for (i=0, status=LIMITED_OK; ilimits[i].supported) { /* skip it if its not known to the system */ continue; } if (pl->limits[i].src_soft == LIMITS_DEF_NONE && pl->limits[i].src_hard == LIMITS_DEF_NONE) { /* skip it if its not initialized */ continue; } if (pl->limits[i].limit.rlim_cur > pl->limits[i].limit.rlim_max) pl->limits[i].limit.rlim_cur = pl->limits[i].limit.rlim_max; res = setrlimit(i, &pl->limits[i].limit); if (res != 0) pam_syslog(pamh, LOG_ERR, "Could not set limit for '%s': %m", rlimit2str(i)); status |= res; } if (status) { retval = LIMIT_ERR; } status = setpriority(PRIO_PROCESS, 0, pl->priority); if (status != 0) { pam_syslog(pamh, LOG_ERR, "Could not set limit for PRIO_PROCESS: %m"); retval = LIMIT_ERR; } if (uid == 0) { D(("skip login limit check for uid=0")); } else if (pl->login_limit > 0) { if (check_logins(pamh, uname, pl->login_limit, ctrl, pl) == LOGIN_ERR) { #ifdef HAVE_LIBAUDIT if (!(ctrl & PAM_NO_AUDIT)) { pam_modutil_audit_write(pamh, AUDIT_ANOM_LOGIN_SESSIONS, "pam_limits", PAM_PERM_DENIED); /* ignore return value as we fail anyway */ } #endif retval |= LOGIN_ERR; } } else if (pl->login_limit == 0) { retval |= LOGIN_ERR; } return retval; } /* now the session stuff */ PAM_EXTERN int pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int retval; int i; int glob_rc; char *user_name; struct passwd *pwd; int ctrl; struct pam_limit_s plstruct; struct pam_limit_s *pl = &plstruct; glob_t globbuf; const char *oldlocale; D(("called.")); memset(pl, 0, sizeof(*pl)); memset(&globbuf, 0, sizeof(globbuf)); ctrl = _pam_parse(pamh, argc, argv, pl); retval = pam_get_item( pamh, PAM_USER, (void*) &user_name ); if ( user_name == NULL || retval != PAM_SUCCESS ) { pam_syslog(pamh, LOG_CRIT, "open_session - error recovering username"); return PAM_SESSION_ERR; } pwd = pam_modutil_getpwnam(pamh, user_name); if (!pwd) { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_WARNING, "open_session username '%s' does not exist", user_name); return PAM_USER_UNKNOWN; } retval = init_limits(pamh, pl, ctrl); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_WARNING, "cannot initialize"); return PAM_ABORT; } retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid, ctrl, pl); if (retval == PAM_IGNORE) { D(("the configuration file ('%s') has an applicable ' -' entry", CONF_FILE)); return PAM_SUCCESS; } if (retval != PAM_SUCCESS || pl->conf_file != NULL) /* skip reading limits.d if config file explicitely specified */ goto out; /* Read subsequent *.conf files, if they exist. */ /* set the LC_COLLATE so the sorting order doesn't depend on system locale */ oldlocale = setlocale(LC_COLLATE, "C"); glob_rc = glob(LIMITS_CONF_GLOB, GLOB_ERR, NULL, &globbuf); if (oldlocale != NULL) setlocale (LC_COLLATE, oldlocale); if (!glob_rc) { /* Parse the *.conf files. */ for (i = 0; globbuf.gl_pathv[i] != NULL; i++) { pl->conf_file = globbuf.gl_pathv[i]; retval = parse_config_file(pamh, pwd->pw_name, pwd->pw_uid, pwd->pw_gid, ctrl, pl); if (retval == PAM_IGNORE) { D(("the configuration file ('%s') has an applicable ' -' entry", pl->conf_file)); globfree(&globbuf); return PAM_SUCCESS; } if (retval != PAM_SUCCESS) goto out; } } out: globfree(&globbuf); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_WARNING, "error parsing the configuration file: '%s' ",CONF_FILE); return retval; } retval = setup_limits(pamh, pwd->pw_name, pwd->pw_uid, ctrl, pl); if (retval & LOGIN_ERR) pam_error(pamh, _("Too many logins for '%s'."), pwd->pw_name); if (retval != LIMITED_OK) { return PAM_PERM_DENIED; } return PAM_SUCCESS; } PAM_EXTERN int pam_sm_close_session (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { /* nothing to do */ return PAM_SUCCESS; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_limits_modstruct = { "pam_limits", NULL, NULL, NULL, pam_sm_open_session, pam_sm_close_session, NULL }; #endif /* * Copyright (c) Cristian Gafton, 1996-1997, * 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, 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. */ Linux-PAM-1.1.8/modules/pam_limits/Makefile.am0000644000000000000000000000201212160065211015751 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) limits.conf tst-pam_limits man_MANS = limits.conf.5 pam_limits.8 XMLS = README.xml limits.conf.5.xml pam_limits.8.xml TESTS = tst-pam_limits securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) limits_conf_dir = $(SCONFIGDIR)/limits.d AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -DLIMITS_FILE_DIR=\"$(limits_conf_dir)/*.conf\" \ -DLIMITS_FILE=\"$(SCONFIGDIR)/limits.conf\" AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_limits.la pam_limits_la_LIBADD = $(top_builddir)/libpam/libpam.la secureconf_DATA = limits.conf if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_limits.8.xml limits.conf.5.xml -include $(top_srcdir)/Make.xml.rules endif install-data-local: mkdir -p $(DESTDIR)$(limits_conf_dir) Linux-PAM-1.1.8/modules/pam_limits/README0000644000000000000000000000455412216527600014621 00000000000000pam_limits — PAM module to limit resources ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_limits PAM module sets limits on the system resources that can be obtained in a user-session. Users of uid=0 are affected by this limits, too. By default limits are taken from the /etc/security/limits.conf config file. Then individual *.conf files from the /etc/security/limits.d/ directory are read. The files are parsed one after another in the order of "C" locale. The effect of the individual files is the same as if all the files were concatenated together in the order of parsing. If a config file is explicitly specified with a module option then the files in the above directory are not parsed. The module must not be called by a multithreaded application. If Linux PAM is compiled with audit support the module will report when it denies access based on limit of maximum number of concurrent login sessions. OPTIONS conf=/path/to/limits.conf Indicate an alternative limits.conf style configuration file to override the default. debug Print debug information. set_all Set the limits for which no value is specified in the configuration file to the one from the process with the PID 1. utmp_early Some broken applications actually allocate a utmp entry for the user before the user is admitted to the system. If some of the services you are configuring PAM for do this, you can selectively use this module argument to compensate for this behavior and at the same time maintain system-wide consistency with a single limits.conf file. noaudit Do not report exceeded maximum logins count to the audit subsystem. EXAMPLES These are some example lines which might be specified in /etc/security/ limits.conf. * soft core 0 * hard nofile 512 @student hard nproc 20 @faculty soft nproc 20 @faculty hard nproc 50 ftp hard nproc 0 @student - maxlogins 4 :123 hard cpu 5000 @500: soft cpu 10000 600:700 hard locks 10 Linux-PAM-1.1.8/modules/pam_limits/pam_limits.80000644000000000000000000001040212216527600016155 00000000000000'\" t .\" Title: pam_limits .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_LIMITS" "8" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_limits \- PAM module to limit resources .SH "SYNOPSIS" .HP \w'\fBpam_limits\&.so\fR\ 'u \fBpam_limits\&.so\fR [conf=\fI/path/to/limits\&.conf\fR] [debug] [set_all] [utmp_early] [noaudit] .SH "DESCRIPTION" .PP The pam_limits PAM module sets limits on the system resources that can be obtained in a user\-session\&. Users of \fIuid=0\fR are affected by this limits, too\&. .PP By default limits are taken from the /etc/security/limits\&.conf config file\&. Then individual *\&.conf files from the /etc/security/limits\&.d/ directory are read\&. The files are parsed one after another in the order of "C" locale\&. The effect of the individual files is the same as if all the files were concatenated together in the order of parsing\&. If a config file is explicitly specified with a module option then the files in the above directory are not parsed\&. .PP The module must not be called by a multithreaded application\&. .PP If Linux PAM is compiled with audit support the module will report when it denies access based on limit of maximum number of concurrent login sessions\&. .SH "OPTIONS" .PP \fBconf=\fR\fB\fI/path/to/limits\&.conf\fR\fR .RS 4 Indicate an alternative limits\&.conf style configuration file to override the default\&. .RE .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBset_all\fR .RS 4 Set the limits for which no value is specified in the configuration file to the one from the process with the PID 1\&. .RE .PP \fButmp_early\fR .RS 4 Some broken applications actually allocate a utmp entry for the user before the user is admitted to the system\&. If some of the services you are configuring PAM for do this, you can selectively use this module argument to compensate for this behavior and at the same time maintain system\-wide consistency with a single limits\&.conf file\&. .RE .PP \fBnoaudit\fR .RS 4 Do not report exceeded maximum logins count to the audit subsystem\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBsession\fR module type is provided\&. .SH "RETURN VALUES" .PP PAM_ABORT .RS 4 Cannot get current limits\&. .RE .PP PAM_IGNORE .RS 4 No limits found for this user\&. .RE .PP PAM_PERM_DENIED .RS 4 New limits could not be set\&. .RE .PP PAM_SERVICE_ERR .RS 4 Cannot read config file\&. .RE .PP PAM_SESSION_ERR .RS 4 Error recovering account name\&. .RE .PP PAM_SUCCESS .RS 4 Limits were changed\&. .RE .PP PAM_USER_UNKNOWN .RS 4 The user is not known to the system\&. .RE .SH "FILES" .PP /etc/security/limits\&.conf .RS 4 Default configuration file .RE .SH "EXAMPLES" .PP For the services you need resources limits (login for example) put a the following line in /etc/pam\&.d/login as the last line for that service (usually after the pam_unix session line): .sp .if n \{\ .RS 4 .\} .nf #%PAM\-1\&.0 # # Resource limits imposed on login sessions via pam_limits # session required pam_limits\&.so .fi .if n \{\ .RE .\} .PP Replace "login" for each service you are using this module\&. .SH "SEE ALSO" .PP \fBlimits.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8)\&. .SH "AUTHORS" .PP pam_limits was initially written by Cristian Gafton Linux-PAM-1.1.8/modules/pam_limits/Makefile.in0000644000000000000000000006603712216527536016022 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_limits DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man5dir)" \ "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(secureconfdir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_limits_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_limits_la_SOURCES = pam_limits.c pam_limits_la_OBJECTS = pam_limits.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_limits.c DIST_SOURCES = pam_limits.c man5dir = $(mandir)/man5 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) $(secureconf_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) limits.conf tst-pam_limits man_MANS = limits.conf.5 pam_limits.8 XMLS = README.xml limits.conf.5.xml pam_limits.8.xml TESTS = tst-pam_limits securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) limits_conf_dir = $(SCONFIGDIR)/limits.d AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -DLIMITS_FILE_DIR=\"$(limits_conf_dir)/*.conf\" \ -DLIMITS_FILE=\"$(SCONFIGDIR)/limits.conf\" AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_limits.la pam_limits_la_LIBADD = $(top_builddir)/libpam/libpam.la secureconf_DATA = limits.conf @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_limits/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_limits/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_limits.la: $(pam_limits_la_OBJECTS) $(pam_limits_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_limits_la_OBJECTS) $(pam_limits_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_limits.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man5: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" @list=''; test -n "$(man5dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man5dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man5dir)" && rm -f $$files; } install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } install-secureconfDATA: $(secureconf_DATA) @$(NORMAL_INSTALL) test -z "$(secureconfdir)" || $(MKDIR_P) "$(DESTDIR)$(secureconfdir)" @list='$(secureconf_DATA)'; test -n "$(secureconfdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(secureconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(secureconfdir)" || exit $$?; \ done uninstall-secureconfDATA: @$(NORMAL_UNINSTALL) @list='$(secureconf_DATA)'; test -n "$(secureconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(secureconfdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(secureconfdir)" && rm -f $$files 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(secureconfdir)"; 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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-man install-secureconfDATA \ install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man5 install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-secureconfDATA \ uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man5 uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man5 \ install-man8 install-pdf install-pdf-am install-ps \ install-ps-am install-secureconfDATA \ install-securelibLTLIBRARIES 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-man uninstall-man5 \ uninstall-man8 uninstall-secureconfDATA \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_limits.8.xml limits.conf.5.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules install-data-local: mkdir -p $(DESTDIR)$(limits_conf_dir) # 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: Linux-PAM-1.1.8/modules/pam_limits/limits.conf0000644000000000000000000000344012160065211016073 00000000000000# /etc/security/limits.conf # #Each line describes a limit for a user in the form: # # # #Where: # can be: # - a user name # - a group name, with @group syntax # - the wildcard *, for default entry # - the wildcard %, can be also used with %group syntax, # for maxlogin limit # # can have the two values: # - "soft" for enforcing the soft limits # - "hard" for enforcing hard limits # # can be one of the following: # - core - limits the core file size (KB) # - data - max data size (KB) # - fsize - maximum filesize (KB) # - memlock - max locked-in-memory address space (KB) # - nofile - max number of open files # - rss - max resident set size (KB) # - stack - max stack size (KB) # - cpu - max CPU time (MIN) # - nproc - max number of processes # - as - address space limit (KB) # - maxlogins - max number of logins for this user # - maxsyslogins - max number of logins on the system # - priority - the priority to run user process with # - locks - max number of file locks the user can hold # - sigpending - max number of pending signals # - msgqueue - max memory used by POSIX message queues (bytes) # - nice - max nice priority allowed to raise to values: [-20, 19] # - rtprio - max realtime priority # # # #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student - maxlogins 4 # End of file Linux-PAM-1.1.8/modules/pam_limits/limits.conf.5.xml0000644000000000000000000003317712160065211017047 00000000000000 limits.conf 5 Linux-PAM Manual limits.conf configuration file for the pam_limits module DESCRIPTION The pam_limits.so module applies ulimit limits, nice priority and number of simultaneous login sessions limit to user login sessions. This description of the configuration file syntax applies to the /etc/security/limits.conf file and *.conf files in the /etc/security/limits.d directory. The syntax of the lines is as follows: <domain> <type> <item> <value> The fields listed above should be filled as follows: a username a groupname, with @group syntax. This should not be confused with netgroups. the wildcard *, for default entry. the wildcard %, for maxlogins limit only, can also be used with %group syntax. If the % wildcard is used alone it is identical to using * with maxsyslogins limit. With a group specified after % it limits the total number of logins of all users that are member of the group. an uid range specified as <min_uid>:<max_uid>. If min_uid is omitted, the match is exact for the max_uid. If max_uid is omitted, all uids greater than or equal min_uid match. a gid range specified as @<min_gid>:<max_gid>. If min_gid is omitted, the match is exact for the max_gid. If max_gid is omitted, all gids greater than or equal min_gid match. For the exact match all groups including the user's supplementary groups are examined. For the range matches only the user's primary group is examined. a gid specified as %:<gid> applicable to maxlogins limit only. It limits the total number of logins of all users that are member of the group with the specified gid. for enforcing hard resource limits. These limits are set by the superuser and enforced by the Kernel. The user cannot raise his requirement of system resources above such values. for enforcing soft resource limits. These limits are ones that the user can move up or down within the permitted range by any pre-existing hard limits. The values specified with this token can be thought of as default values, for normal system usage. for enforcing both soft and hard resource limits together. Note, if you specify a type of '-' but neglect to supply the item and value fields then the module will never enforce any limits on the specified user/group etc. . limits the core file size (KB) maximum data size (KB) maximum filesize (KB) maximum locked-in-memory address space (KB) maximum number of open files maximum resident set size (KB) (Ignored in Linux 2.4.30 and higher) maximum stack size (KB) maximum CPU time (minutes) maximum number of processes address space limit (KB) maximum number of logins for this user except for this with uid=0 maximum number of all logins on system the priority to run user process with (negative values boost process priority) maximum locked files (Linux 2.4 and higher) maximum number of pending signals (Linux 2.6 and higher) maximum memory used by POSIX message queues (bytes) (Linux 2.6 and higher) maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19] maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) All items support the values -1, unlimited or infinity indicating no limit, except for priority and nice. If a hard limit or soft limit of a resource is set to a valid value, but outside of the supported range of the local system, the system may reject the new limit or unexpected behavior may occur. If the control value required is used, the module will reject the login if a limit could not be set. In general, individual limits have priority over group limits, so if you impose no limits for admin group, but one of the members in this group have a limits line, the user will have its limits set according to this line. Also, please note that all limit settings are set per login. They are not global, nor are they permanent; existing only for the duration of the session. One exception is the maxlogin option, this one is system wide. But there is a race, concurrent logins at the same time will not always be detect as such but only counted as one. In the limits configuration file, the '#' character introduces a comment - after which the rest of the line is ignored. The pam_limits module does report configuration problems found in its configuration file and errors via syslog3. EXAMPLES These are some example lines which might be specified in /etc/security/limits.conf. * soft core 0 * hard nofile 512 @student hard nproc 20 @faculty soft nproc 20 @faculty hard nproc 50 ftp hard nproc 0 @student - maxlogins 4 :123 hard cpu 5000 @500: soft cpu 10000 600:700 hard locks 10 SEE ALSO pam_limits8, pam.d5, pam8, getrlimit2 getrlimit3p AUTHOR pam_limits was initially written by Cristian Gafton <gafton@redhat.com> Linux-PAM-1.1.8/modules/pam_limits/README.xml0000644000000000000000000000202612160065211015401 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_limits.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_limits-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_ftp/0000755000000000000000000000000012216542311013275 500000000000000Linux-PAM-1.1.8/modules/pam_ftp/pam_ftp.80000644000000000000000000000644212216527576014762 00000000000000'\" t .\" Title: pam_ftp .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_FTP" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_ftp \- PAM module for anonymous access module .SH "SYNOPSIS" .HP \w'\fBpam_ftp\&.so\fR\ 'u \fBpam_ftp\&.so\fR [debug] [ignore] [users=\fIXXX,YYY,\fR...] .SH "DESCRIPTION" .PP pam_ftp is a PAM module which provides a pluggable anonymous ftp mode of access\&. .PP This module intercepts the user\*(Aqs name and password\&. If the name is \fIftp\fR or \fIanonymous\fR, the user\*(Aqs password is broken up at the \fI@\fR delimiter into a \fIPAM_RUSER\fR and a \fIPAM_RHOST\fR part; these pam\-items being set accordingly\&. The username (\fIPAM_USER\fR) is set to \fIftp\fR\&. In this case the module succeeds\&. Alternatively, the module sets the \fIPAM_AUTHTOK\fR item with the entered password and fails\&. .PP This module is not safe and easily spoofable\&. .SH "OPTIONS" .PP .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBignore\fR .RS 4 Pay no attention to the email address of the user (if supplied)\&. .RE .PP \fBftp=\fR\fB\fIXXX,YYY,\&.\&.\&.\fR\fR .RS 4 Instead of \fIftp\fR or \fIanonymous\fR, provide anonymous login to the comma separated list of users: \fB\fIXXX,YYY,\&.\&.\&.\fR\fR\&. Should the applicant enter one of these usernames the returned username is set to the first in the list: \fIXXX\fR\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBauth\fR module type is provided\&. .SH "RETURN VALUES" .PP .PP PAM_SUCCESS .RS 4 The authentication was successful\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known\&. .RE .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/ftpd to handle ftp style anonymous login: .sp .if n \{\ .RS 4 .\} .nf # # ftpd; add ftp\-specifics\&. These lines enable anonymous ftp over # standard UN*X access (the listfile entry blocks access to # users listed in /etc/ftpusers) # auth sufficient pam_ftp\&.so auth required pam_unix\&.so use_first_pass auth required pam_listfile\&.so \e onerr=succeed item=user sense=deny file=/etc/ftpusers .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_ftp was written by Andrew G\&. Morgan \&. Linux-PAM-1.1.8/modules/pam_ftp/pam_ftp.8.xml0000644000000000000000000001162612160065211015536 00000000000000 pam_ftp 8 Linux-PAM Manual pam_ftp PAM module for anonymous access module pam_ftp.so debug ignore users=XXX,YYY, DESCRIPTION pam_ftp is a PAM module which provides a pluggable anonymous ftp mode of access. This module intercepts the user's name and password. If the name is ftp or anonymous, the user's password is broken up at the @ delimiter into a PAM_RUSER and a PAM_RHOST part; these pam-items being set accordingly. The username (PAM_USER) is set to ftp. In this case the module succeeds. Alternatively, the module sets the PAM_AUTHTOK item with the entered password and fails. This module is not safe and easily spoofable. OPTIONS Print debug information. Pay no attention to the email address of the user (if supplied). Instead of ftp or anonymous, provide anonymous login to the comma separated list of users: . Should the applicant enter one of these usernames the returned username is set to the first in the list: XXX. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_SUCCESS The authentication was successful. PAM_USER_UNKNOWN User not known. EXAMPLES Add the following line to /etc/pam.d/ftpd to handle ftp style anonymous login: # # ftpd; add ftp-specifics. These lines enable anonymous ftp over # standard UN*X access (the listfile entry blocks access to # users listed in /etc/ftpusers) # auth sufficient pam_ftp.so auth required pam_unix.so use_first_pass auth required pam_listfile.so \ onerr=succeed item=user sense=deny file=/etc/ftpusers SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_ftp was written by Andrew G. Morgan <morgan@kernel.org>. Linux-PAM-1.1.8/modules/pam_ftp/pam_ftp.c0000644000000000000000000001174212160065211015011 00000000000000/* pam_ftp module */ /* * $Id$ * * Written by Andrew Morgan 1996/3/11 * */ #define PLEASE_ENTER_PASSWORD "Password required for %s." #define GUEST_LOGIN_PROMPT "Guest login ok, " \ "send your complete e-mail address as password." /* the following is a password that "can't be correct" */ #define BLOCK_PASSWORD "\177BAD PASSWPRD\177" #include "config.h" #include #include #include #include #include #include /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #define PAM_SM_AUTH #include #include #include /* argument parsing */ #define PAM_DEBUG_ARG 01 #define PAM_IGNORE_EMAIL 02 #define PAM_NO_ANON 04 static int _pam_parse(pam_handle_t *pamh, int argc, const char **argv, const char **users) { int ctrl=0; /* step through arguments */ for (ctrl=0; argc-- > 0; ++argv) { /* generic options */ if (!strcmp(*argv,"debug")) ctrl |= PAM_DEBUG_ARG; else if (!strncmp(*argv,"users=",6)) { *users = 6 + *argv; } else if (!strcmp(*argv,"ignore")) { ctrl |= PAM_IGNORE_EMAIL; } else { pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } } return ctrl; } /* * check if name is in list or default list. place users name in *_user * return 1 if listed 0 if not. */ static int lookup(const char *name, const char *list, const char **_user) { int anon = 0; *_user = name; /* this is the default */ if (list && *list) { const char *l; char *list_copy, *x; char *sptr = NULL; list_copy = x_strdup(list); x = list_copy; while (list_copy && (l = strtok_r(x, ",", &sptr))) { x = NULL; if (!strcmp(name, l)) { *_user = list; anon = 1; } } _pam_overwrite(list_copy); _pam_drop(list_copy); } else { #define MAX_L 2 static const char *l[MAX_L] = { "ftp", "anonymous" }; int i; for (i=0; i # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_ftp man_MANS = pam_ftp.8 XMLS = README.xml pam_ftp.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_ftp.la pam_ftp_la_LIBADD = $(top_builddir)/libpam/libpam.la TESTS = tst-pam_ftp if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_ftp.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_ftp/README0000644000000000000000000000324212216527575014115 00000000000000pam_ftp — PAM module for anonymous access module ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_ftp is a PAM module which provides a pluggable anonymous ftp mode of access. This module intercepts the user's name and password. If the name is ftp or anonymous, the user's password is broken up at the @ delimiter into a PAM_RUSER and a PAM_RHOST part; these pam-items being set accordingly. The username ( PAM_USER) is set to ftp. In this case the module succeeds. Alternatively, the module sets the PAM_AUTHTOK item with the entered password and fails. This module is not safe and easily spoofable. OPTIONS debug Print debug information. ignore Pay no attention to the email address of the user (if supplied). ftp=XXX,YYY,... Instead of ftp or anonymous, provide anonymous login to the comma separated list of users: XXX,YYY,.... Should the applicant enter one of these usernames the returned username is set to the first in the list: XXX. EXAMPLES Add the following line to /etc/pam.d/ftpd to handle ftp style anonymous login: # # ftpd; add ftp-specifics. These lines enable anonymous ftp over # standard UN*X access (the listfile entry blocks access to # users listed in /etc/ftpusers) # auth sufficient pam_ftp.so auth required pam_unix.so use_first_pass auth required pam_listfile.so \ onerr=succeed item=user sense=deny file=/etc/ftpusers AUTHOR pam_ftp was written by Andrew G. Morgan . Linux-PAM-1.1.8/modules/pam_ftp/Makefile.in0000644000000000000000000006001412216527536015277 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_ftp DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_ftp_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_ftp_la_SOURCES = pam_ftp.c pam_ftp_la_OBJECTS = pam_ftp.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_ftp.c DIST_SOURCES = pam_ftp.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_ftp man_MANS = pam_ftp.8 XMLS = README.xml pam_ftp.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_ftp.la pam_ftp_la_LIBADD = $(top_builddir)/libpam/libpam.la TESTS = tst-pam_ftp @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_ftp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_ftp/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_ftp.la: $(pam_ftp_la_OBJECTS) $(pam_ftp_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_ftp_la_OBJECTS) $(pam_ftp_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_ftp.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_ftp.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_ftp/tst-pam_ftp0000755000000000000000000000006212160065211015374 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_ftp.so Linux-PAM-1.1.8/modules/pam_ftp/README.xml0000644000000000000000000000215412160065211014673 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_ftp.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_ftp-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_echo/0000755000000000000000000000000012216542310013421 500000000000000Linux-PAM-1.1.8/modules/pam_echo/tst-pam_echo0000755000000000000000000000006312160065211015647 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_echo.so Linux-PAM-1.1.8/modules/pam_echo/Makefile.am0000644000000000000000000000133412160065211015374 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_echo man_MANS = pam_echo.8 XMLS = README.xml pam_echo.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_echo.la pam_echo_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_echo.8.xml -include $(top_srcdir)/Make.xml.rules endif TESTS = tst-pam_echo Linux-PAM-1.1.8/modules/pam_echo/README0000644000000000000000000000211412216527573014235 00000000000000pam_echo — PAM module for printing text messages ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_echo PAM module is for printing text messages to inform user about special things. Sequences starting with the % character are interpreted in the following way: %H The name of the remote host (PAM_RHOST). %h The name of the local host. %s The service name (PAM_SERVICE). %t The name of the controlling terminal (PAM_TTY). %U The remote user name (PAM_RUSER). %u The local user name (PAM_USER). All other sequences beginning with % expands to the characters following the % character. EXAMPLES For an example of the use of this module, we show how it may be used to print information about good passwords: password optional pam_echo.so file=/usr/share/doc/good-password.txt password required pam_unix.so AUTHOR Thorsten Kukuk Linux-PAM-1.1.8/modules/pam_echo/pam_echo.80000644000000000000000000000567612216527573015241 00000000000000'\" t .\" Title: pam_echo .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_ECHO" "8" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_echo \- PAM module for printing text messages .SH "SYNOPSIS" .HP \w'\fBpam_echo\&.so\fR\ 'u \fBpam_echo\&.so\fR [file=\fI/path/message\fR] .SH "DESCRIPTION" .PP The \fIpam_echo\fR PAM module is for printing text messages to inform user about special things\&. Sequences starting with the \fI%\fR character are interpreted in the following way: .PP \fI%H\fR .RS 4 The name of the remote host (PAM_RHOST)\&. .RE .PP \fI%h\fR .RS 4 The name of the local host\&. .RE .PP \fI%s\fR .RS 4 The service name (PAM_SERVICE)\&. .RE .PP \fI%t\fR .RS 4 The name of the controlling terminal (PAM_TTY)\&. .RE .PP \fI%U\fR .RS 4 The remote user name (PAM_RUSER)\&. .RE .PP \fI%u\fR .RS 4 The local user name (PAM_USER)\&. .RE .PP All other sequences beginning with \fI%\fR expands to the characters following the \fI%\fR character\&. .SH "OPTIONS" .PP \fBfile=\fR\fB\fI/path/message\fR\fR .RS 4 The content of the file /path/message will be printed with the PAM conversion function as PAM_TEXT_INFO\&. .RE .SH "MODULE TYPES PROVIDED" .PP All module types (\fBauth\fR, \fBaccount\fR, \fBpassword\fR and \fBsession\fR) are provided\&. .SH "RETURN VALUES" .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_SUCCESS .RS 4 Message was successful printed\&. .RE .PP PAM_IGNORE .RS 4 PAM_SILENT flag was given or message file does not exist, no message printed\&. .RE .SH "EXAMPLES" .PP For an example of the use of this module, we show how it may be used to print information about good passwords: .sp .if n \{\ .RS 4 .\} .nf password optional pam_echo\&.so file=/usr/share/doc/good\-password\&.txt password required pam_unix\&.so .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBpam.conf\fR(8), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP Thorsten Kukuk Linux-PAM-1.1.8/modules/pam_echo/pam_echo.c0000644000000000000000000001450312160065211015261 00000000000000/* * Copyright (c) 2005, 2006 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 #ifndef HOST_NAME_MAX #define HOST_NAME_MAX 255 #endif #define PAM_SM_ACCOUNT #define PAM_SM_AUTH #define PAM_SM_PASSWORD #define PAM_SM_SESSION #include #include #include #include static int replace_and_print (pam_handle_t *pamh, const char *mesg) { char *output; size_t length = strlen (mesg) + PAM_MAX_MSG_SIZE; char myhostname[HOST_NAME_MAX+1]; const void *str = NULL; const char *p, *q; int item; size_t len; output = malloc (length); if (output == NULL) { pam_syslog (pamh, LOG_ERR, "running out of memory"); return PAM_BUF_ERR; } for (p = mesg, len = 0; *p != '\0' && len < length - 1; ++p) { if (*p != '%' || p[1] == '\0') { output[len++] = *p; continue; } switch (*++p) { case 'H': item = PAM_RHOST; break; case 'h': item = -2; /* aka PAM_LOCALHOST */ break; case 's': item = PAM_SERVICE; break; case 't': item = PAM_TTY; break; case 'U': item = PAM_RUSER; break; case 'u': item = PAM_USER; break; default: output[len++] = *p; continue; } if (item == -2) { if (gethostname (myhostname, sizeof (myhostname)) == -1) str = NULL; else str = &myhostname; } else { if (pam_get_item (pamh, item, &str) != PAM_SUCCESS) str = NULL; } if (str == NULL) str = "(null)"; for (q = str; *q != '\0' && len < length - 1; ++q) output[len++] = *q; } output[len] = '\0'; pam_info (pamh, "%s", output); free (output); return PAM_SUCCESS; } static int pam_echo (pam_handle_t *pamh, int flags, int argc, const char **argv) { int fd; int orig_argc = argc; const char **orig_argv = argv; const char *file = NULL; int retval; if (flags & PAM_SILENT) return PAM_IGNORE; for (; argc-- > 0; ++argv) { if (!strncmp (*argv, "file=", 5)) file = (5 + *argv); } /* No file= option, use argument for output. */ if (file == NULL || file[0] == '\0') { char msg[PAM_MAX_MSG_SIZE]; const char *p; int i; size_t len; for (i = 0, len = 0; i < orig_argc && len < sizeof (msg) - 1; ++i) { if (i > 0) msg[len++] = ' '; for (p = orig_argv[i]; *p != '\0' && len < sizeof(msg) - 1; ++p) msg[len++] = *p; } msg[len] = '\0'; retval = replace_and_print (pamh, msg); } else if ((fd = open (file, O_RDONLY, 0)) >= 0) { char *mtmp = NULL; struct stat st; /* load file into message buffer. */ if ((fstat (fd, &st) < 0) || !st.st_size) return PAM_IGNORE; mtmp = malloc (st.st_size + 1); if (!mtmp) return PAM_BUF_ERR; if (pam_modutil_read (fd, mtmp, st.st_size) == -1) { pam_syslog (pamh, LOG_ERR, "Error while reading %s: %m", file); free (mtmp); return PAM_IGNORE; } if (mtmp[st.st_size - 1] == '\n') mtmp[st.st_size - 1] = '\0'; else mtmp[st.st_size] = '\0'; close (fd); retval = replace_and_print (pamh, mtmp); free (mtmp); } else { pam_syslog (pamh, LOG_ERR, "Cannot open %s: %m", file); retval = PAM_IGNORE; } return retval; } int pam_sm_authenticate (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_echo (pamh, flags, argc, argv); } int pam_sm_setcred (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_IGNORE; } int pam_sm_acct_mgmt (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_echo (pamh, flags, argc, argv); } int pam_sm_open_session (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_echo (pamh, flags, argc, argv); } int pam_sm_close_session (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_IGNORE; } int pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv) { if (flags & PAM_PRELIM_CHECK) return pam_echo (pamh, flags, argc, argv); else return PAM_IGNORE; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_echo_modstruct = { "pam_echo", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, pam_sm_chauthtok, }; #endif Linux-PAM-1.1.8/modules/pam_echo/Makefile.in0000644000000000000000000006004612216527535015430 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_echo DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_echo_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_echo_la_SOURCES = pam_echo.c pam_echo_la_OBJECTS = pam_echo.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_echo.c DIST_SOURCES = pam_echo.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_echo man_MANS = pam_echo.8 XMLS = README.xml pam_echo.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_echo.la pam_echo_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README TESTS = tst-pam_echo all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_echo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_echo/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_echo.la: $(pam_echo_la_OBJECTS) $(pam_echo_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_echo_la_OBJECTS) $(pam_echo_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_echo.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_echo.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_echo/README.xml0000644000000000000000000000171012160065211015015 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_echo.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_echo-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_echo/pam_echo.8.xml0000644000000000000000000001144412160065211016006 00000000000000 pam_echo 8 Linux-PAM Manual pam_echo PAM module for printing text messages pam_echo.so file=/path/message DESCRIPTION The pam_echo PAM module is for printing text messages to inform user about special things. Sequences starting with the % character are interpreted in the following way: %H The name of the remote host (PAM_RHOST). %h The name of the local host. %s The service name (PAM_SERVICE). %t The name of the controlling terminal (PAM_TTY). %U The remote user name (PAM_RUSER). %u The local user name (PAM_USER). All other sequences beginning with % expands to the characters following the % character. OPTIONS The content of the file /path/message will be printed with the PAM conversion function as PAM_TEXT_INFO. MODULE TYPES PROVIDED All module types (, , and ) are provided. RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_SUCCESS Message was successful printed. PAM_IGNORE PAM_SILENT flag was given or message file does not exist, no message printed. EXAMPLES For an example of the use of this module, we show how it may be used to print information about good passwords: password optional pam_echo.so file=/usr/share/doc/good-password.txt password required pam_unix.so SEE ALSO pam.conf8 , pam.d5 , pam8 AUTHOR Thorsten Kukuk <kukuk@thkukuk.de> Linux-PAM-1.1.8/modules/pam_keyinit/0000755000000000000000000000000012216542311014160 500000000000000Linux-PAM-1.1.8/modules/pam_keyinit/pam_keyinit.8.xml0000644000000000000000000001457712160065211017314 00000000000000 pam_keyinit 8 Linux-PAM Manual pam_keyinit Kernel session keyring initialiser module pam_keyinit.so debug force revoke DESCRIPTION The pam_keyinit PAM module ensures that the invoking process has a session keyring other than the user default session keyring. The session component of the module checks to see if the process's session keyring is the user default, and, if it is, creates a new anonymous session keyring with which to replace it. If a new session keyring is created, it will install a link to the user common keyring in the session keyring so that keys common to the user will be automatically accessible through it. The session keyring of the invoking process will thenceforth be inherited by all its children unless they override it. This module is intended primarily for use by login processes. Be aware that after the session keyring has been replaced, the old session keyring and the keys it contains will no longer be accessible. This module should not, generally, be invoked by programs like su, since it is usually desirable for the key set to percolate through to the alternate context. The keys have their own permissions system to manage this. This module should be included as early as possible in a PAM configuration, so that other PAM modules can attach tokens to the keyring. The keyutils package is used to manipulate keys more directly. This can be obtained from: Keyutils OPTIONS Log debug information with syslog3 . Causes the session keyring of the invoking process to be replaced unconditionally. Causes the session keyring of the invoking process to be revoked when the invoking process exits if the session keyring was created for this process in the first place. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_SUCCESS This module will usually return this value PAM_AUTH_ERR Authentication failure. PAM_BUF_ERR Memory buffer error. PAM_IGNORE The return value should be ignored by PAM dispatch. PAM_SERVICE_ERR Cannot determine the user name. PAM_SESSION_ERR This module will return this value if its arguments are invalid or if a system error such as ENOMEM occurs. PAM_USER_UNKNOWN User not known. EXAMPLES Add this line to your login entries to start each login session with its own session keyring: session required pam_keyinit.so This will prevent keys from one session leaking into another session for the same user. SEE ALSO pam.conf5 , pam.d5 , pam8 keyctl1 AUTHOR pam_keyinit was written by David Howells, <dhowells@redhat.com>. Linux-PAM-1.1.8/modules/pam_keyinit/Makefile.am0000644000000000000000000000146212160065211016134 00000000000000# # Copyright (c) 2006, 2009 David Howells # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(XMLS) pam_keyinit.8 tst-pam_keyinit XMLS = README.xml pam_keyinit.8.xml if HAVE_KEY_MANAGEMENT man_MANS = pam_keyinit.8 TESTS = tst-pam_keyinit endif if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_keyinit.8.xml -include $(top_srcdir)/Make.xml.rules endif securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif if HAVE_KEY_MANAGEMENT securelib_LTLIBRARIES = pam_keyinit.la endif pam_keyinit_la_LIBADD = $(top_builddir)/libpam/libpam.la Linux-PAM-1.1.8/modules/pam_keyinit/tst-pam_keyinit0000755000000000000000000000006612160065211017146 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_keyinit.so Linux-PAM-1.1.8/modules/pam_keyinit/README0000644000000000000000000000430512216527577015003 00000000000000pam_keyinit — Kernel session keyring initialiser module ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_keyinit PAM module ensures that the invoking process has a session keyring other than the user default session keyring. The session component of the module checks to see if the process's session keyring is the user default, and, if it is, creates a new anonymous session keyring with which to replace it. If a new session keyring is created, it will install a link to the user common keyring in the session keyring so that keys common to the user will be automatically accessible through it. The session keyring of the invoking process will thenceforth be inherited by all its children unless they override it. This module is intended primarily for use by login processes. Be aware that after the session keyring has been replaced, the old session keyring and the keys it contains will no longer be accessible. This module should not, generally, be invoked by programs like su, since it is usually desirable for the key set to percolate through to the alternate context. The keys have their own permissions system to manage this. This module should be included as early as possible in a PAM configuration, so that other PAM modules can attach tokens to the keyring. The keyutils package is used to manipulate keys more directly. This can be obtained from: Keyutils OPTIONS debug Log debug information with syslog(3). force Causes the session keyring of the invoking process to be replaced unconditionally. revoke Causes the session keyring of the invoking process to be revoked when the invoking process exits if the session keyring was created for this process in the first place. EXAMPLES Add this line to your login entries to start each login session with its own session keyring: session required pam_keyinit.so This will prevent keys from one session leaking into another session for the same user. AUTHOR pam_keyinit was written by David Howells, . Linux-PAM-1.1.8/modules/pam_keyinit/pam_keyinit.80000644000000000000000000001037212216527577016526 00000000000000'\" t .\" Title: pam_keyinit .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_KEYINIT" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_keyinit \- Kernel session keyring initialiser module .SH "SYNOPSIS" .HP \w'\fBpam_keyinit\&.so\fR\ 'u \fBpam_keyinit\&.so\fR [debug] [force] [revoke] .SH "DESCRIPTION" .PP The pam_keyinit PAM module ensures that the invoking process has a session keyring other than the user default session keyring\&. .PP The session component of the module checks to see if the process\*(Aqs session keyring is the user default, and, if it is, creates a new anonymous session keyring with which to replace it\&. .PP If a new session keyring is created, it will install a link to the user common keyring in the session keyring so that keys common to the user will be automatically accessible through it\&. .PP The session keyring of the invoking process will thenceforth be inherited by all its children unless they override it\&. .PP This module is intended primarily for use by login processes\&. Be aware that after the session keyring has been replaced, the old session keyring and the keys it contains will no longer be accessible\&. .PP This module should not, generally, be invoked by programs like \fBsu\fR, since it is usually desirable for the key set to percolate through to the alternate context\&. The keys have their own permissions system to manage this\&. .PP This module should be included as early as possible in a PAM configuration, so that other PAM modules can attach tokens to the keyring\&. .PP The keyutils package is used to manipulate keys more directly\&. This can be obtained from: .PP \m[blue]\fBKeyutils\fR\m[]\&\s-2\u[1]\d\s+2 .SH "OPTIONS" .PP \fBdebug\fR .RS 4 Log debug information with \fBsyslog\fR(3)\&. .RE .PP \fBforce\fR .RS 4 Causes the session keyring of the invoking process to be replaced unconditionally\&. .RE .PP \fBrevoke\fR .RS 4 Causes the session keyring of the invoking process to be revoked when the invoking process exits if the session keyring was created for this process in the first place\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBsession\fR module type is provided\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 This module will usually return this value .RE .PP PAM_AUTH_ERR .RS 4 Authentication failure\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_IGNORE .RS 4 The return value should be ignored by PAM dispatch\&. .RE .PP PAM_SERVICE_ERR .RS 4 Cannot determine the user name\&. .RE .PP PAM_SESSION_ERR .RS 4 This module will return this value if its arguments are invalid or if a system error such as ENOMEM occurs\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known\&. .RE .SH "EXAMPLES" .PP Add this line to your login entries to start each login session with its own session keyring: .sp .if n \{\ .RS 4 .\} .nf session required pam_keyinit\&.so .fi .if n \{\ .RE .\} .PP This will prevent keys from one session leaking into another session for the same user\&. .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8)\fBkeyctl\fR(1) .SH "AUTHOR" .PP pam_keyinit was written by David Howells, \&. .SH "NOTES" .IP " 1." 4 Keyutils .RS 4 \%http://people.redhat.com/~dhowells/keyutils/ .RE Linux-PAM-1.1.8/modules/pam_keyinit/Makefile.in0000644000000000000000000006044712216527536016174 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2006, 2009 David Howells # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_keyinit DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_keyinit_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_keyinit_la_SOURCES = pam_keyinit.c pam_keyinit_la_OBJECTS = pam_keyinit.lo @HAVE_KEY_MANAGEMENT_TRUE@am_pam_keyinit_la_rpath = -rpath \ @HAVE_KEY_MANAGEMENT_TRUE@ $(securelibdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_keyinit.c DIST_SOURCES = pam_keyinit.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(XMLS) pam_keyinit.8 tst-pam_keyinit XMLS = README.xml pam_keyinit.8.xml @HAVE_KEY_MANAGEMENT_TRUE@man_MANS = pam_keyinit.8 @HAVE_KEY_MANAGEMENT_TRUE@TESTS = tst-pam_keyinit @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) @HAVE_KEY_MANAGEMENT_TRUE@securelib_LTLIBRARIES = pam_keyinit.la pam_keyinit_la_LIBADD = $(top_builddir)/libpam/libpam.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_keyinit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_keyinit/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_keyinit.la: $(pam_keyinit_la_OBJECTS) $(pam_keyinit_la_DEPENDENCIES) $(LINK) $(am_pam_keyinit_la_rpath) $(pam_keyinit_la_OBJECTS) $(pam_keyinit_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_keyinit.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_keyinit.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_keyinit/README.xml0000644000000000000000000000223012160065211015551 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_keyinit.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_keyinit-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_keyinit/pam_keyinit.c0000644000000000000000000001562112160065211016557 00000000000000/* pam_keyinit.c: Initialise the session keyring on login through a PAM module * * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. * Written by David Howells (dhowells@redhat.com) * * 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. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #define KEY_SPEC_SESSION_KEYRING -3 /* ID for session keyring */ #define KEY_SPEC_USER_KEYRING -4 /* ID for UID-specific keyring */ #define KEY_SPEC_USER_SESSION_KEYRING -5 /* - key ID for UID-session keyring */ #define KEYCTL_GET_KEYRING_ID 0 /* ask for a keyring's ID */ #define KEYCTL_JOIN_SESSION_KEYRING 1 /* start named session keyring */ #define KEYCTL_REVOKE 3 /* revoke a key */ #define KEYCTL_LINK 8 /* link a key into a keyring */ static int my_session_keyring; static int session_counter; static int do_revoke; static int revoke_as_uid; static int revoke_as_gid; static int xdebug = 0; static void debug(pam_handle_t *pamh, const char *fmt, ...) __attribute__((format(printf, 2, 3))); static void debug(pam_handle_t *pamh, const char *fmt, ...) { va_list va; if (xdebug) { va_start(va, fmt); pam_vsyslog(pamh, LOG_DEBUG, fmt, va); va_end(va); } } static int error(pam_handle_t *pamh, const char *fmt, ...) __attribute__((format(printf, 2, 3))); static int error(pam_handle_t *pamh, const char *fmt, ...) { va_list va; va_start(va, fmt); pam_vsyslog(pamh, LOG_ERR, fmt, va); va_end(va); return PAM_SESSION_ERR; } /* * initialise the session keyring for this process */ static int init_keyrings(pam_handle_t *pamh, int force) { int session, usession, ret; if (!force) { /* get the IDs of the session keyring and the user session * keyring */ session = syscall(__NR_keyctl, KEYCTL_GET_KEYRING_ID, KEY_SPEC_SESSION_KEYRING, 0); debug(pamh, "GET SESSION = %d", session); if (session < 0) { /* don't worry about keyrings if facility not * installed */ if (errno == ENOSYS) return PAM_SUCCESS; return PAM_SESSION_ERR; } usession = syscall(__NR_keyctl, KEYCTL_GET_KEYRING_ID, KEY_SPEC_USER_SESSION_KEYRING, 0); debug(pamh, "GET SESSION = %d", usession); if (usession < 0) return PAM_SESSION_ERR; /* if the user session keyring is our keyring, then we don't * need to do anything if we're not forcing */ if (session != usession) return PAM_SUCCESS; } /* create a session keyring, discarding the old one */ ret = syscall(__NR_keyctl, KEYCTL_JOIN_SESSION_KEYRING, NULL); debug(pamh, "JOIN = %d", ret); if (ret < 0) return PAM_SESSION_ERR; my_session_keyring = ret; /* make a link from the session keyring to the user keyring */ ret = syscall(__NR_keyctl, KEYCTL_LINK, KEY_SPEC_USER_KEYRING, KEY_SPEC_SESSION_KEYRING); return ret < 0 ? PAM_SESSION_ERR : PAM_SUCCESS; } /* * revoke the session keyring for this process */ static void kill_keyrings(pam_handle_t *pamh) { int old_uid, old_gid; /* revoke the session keyring we created earlier */ if (my_session_keyring > 0) { debug(pamh, "REVOKE %d", my_session_keyring); old_uid = geteuid(); old_gid = getegid(); debug(pamh, "UID:%d [%d] GID:%d [%d]", revoke_as_uid, old_uid, revoke_as_gid, old_gid); /* switch to the real UID and GID so that we have permission to * revoke the key */ if (revoke_as_gid != old_gid && setregid(-1, revoke_as_gid) < 0) error(pamh, "Unable to change GID to %d temporarily\n", revoke_as_gid); if (revoke_as_uid != old_uid && setresuid(-1, revoke_as_uid, old_uid) < 0) error(pamh, "Unable to change UID to %d temporarily\n", revoke_as_uid); syscall(__NR_keyctl, KEYCTL_REVOKE, my_session_keyring); /* return to the orignal UID and GID (probably root) */ if (revoke_as_uid != old_uid && setreuid(-1, old_uid) < 0) error(pamh, "Unable to change UID back to %d\n", old_uid); if (revoke_as_gid != old_gid && setregid(-1, old_gid) < 0) error(pamh, "Unable to change GID back to %d\n", old_gid); my_session_keyring = 0; } } /* * open a PAM session by making sure there's a session keyring */ PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { struct passwd *pw; const char *username; int ret, old_uid, uid, old_gid, gid, loop, force = 0; for (loop = 0; loop < argc; loop++) { if (strcmp(argv[loop], "force") == 0) force = 1; else if (strcmp(argv[loop], "debug") == 0) xdebug = 1; else if (strcmp(argv[loop], "revoke") == 0) do_revoke = 1; } /* don't do anything if already created a keyring (will be called * multiple times if mentioned more than once in a pam script) */ session_counter++; debug(pamh, "OPEN %d", session_counter); if (my_session_keyring > 0) return PAM_SUCCESS; /* look up the target UID */ ret = pam_get_user(pamh, &username, "key user"); if (ret != PAM_SUCCESS) return ret; pw = pam_modutil_getpwnam(pamh, username); if (!pw) { error(pamh, "Unable to look up user \"%s\"\n", username); return PAM_USER_UNKNOWN; } revoke_as_uid = uid = pw->pw_uid; old_uid = getuid(); revoke_as_gid = gid = pw->pw_gid; old_gid = getgid(); debug(pamh, "UID:%d [%d] GID:%d [%d]", uid, old_uid, gid, old_gid); /* switch to the real UID and GID so that the keyring ends up owned by * the right user */ if (gid != old_gid && setregid(gid, -1) < 0) { error(pamh, "Unable to change GID to %d temporarily\n", gid); return PAM_SESSION_ERR; } if (uid != old_uid && setreuid(uid, -1) < 0) { error(pamh, "Unable to change UID to %d temporarily\n", uid); setregid(old_gid, -1); return PAM_SESSION_ERR; } ret = init_keyrings(pamh, force); /* return to the orignal UID and GID (probably root) */ if (uid != old_uid && setreuid(old_uid, -1) < 0) ret = error(pamh, "Unable to change UID back to %d\n", old_uid); if (gid != old_gid && setregid(old_gid, -1) < 0) ret = error(pamh, "Unable to change GID back to %d\n", old_gid); return ret; } /* * close a PAM session by revoking the session keyring if requested */ PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { debug(pamh, "CLOSE %d,%d,%d", session_counter, my_session_keyring, do_revoke); session_counter--; if (session_counter == 0 && my_session_keyring > 0 && do_revoke) kill_keyrings(pamh); return PAM_SUCCESS; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_keyinit_modstruct = { "pam_keyinit", NULL, NULL, NULL, pam_sm_open_session, pam_sm_close_session, NULL }; #endif Linux-PAM-1.1.8/modules/pam_unix/0000755000000000000000000000000012216542312013470 500000000000000Linux-PAM-1.1.8/modules/pam_unix/md5_broken.c0000644000000000000000000000010612160065211015572 00000000000000#define MD5Name(x) Broken##x #include "md5.c" #include "md5_crypt.c" Linux-PAM-1.1.8/modules/pam_unix/bigcrypt.h0000644000000000000000000000007212160065211015377 00000000000000extern char *bigcrypt(const char *key, const char *salt); Linux-PAM-1.1.8/modules/pam_unix/bigcrypt.c0000644000000000000000000001042512160065211015375 00000000000000/* * This function implements the "bigcrypt" algorithm specifically for * Linux-PAM. * * This algorithm is algorithm 0 (default) shipped with the C2 secure * implementation of Digital UNIX. * * Disclaimer: This work is not based on the source code to Digital * UNIX, nor am I connected to Digital Equipment Corp, in any way * other than as a customer. This code is based on published * interfaces and reasonable guesswork. * * Description: The cleartext is divided into blocks of SEGMENT_SIZE=8 * characters or less. Each block is encrypted using the standard UNIX * libc crypt function. The result of the encryption for one block * provides the salt for the suceeding block. * * Restrictions: The buffer used to hold the encrypted result is * statically allocated. (see MAX_PASS_LEN below). This is necessary, * as the returned pointer points to "static data that are overwritten * by each call", (XPG3: XSI System Interface + Headers pg 109), and * this is a drop in replacement for crypt(); * * Andy Phillips */ #include "config.h" #include #include #include #ifdef HAVE_LIBXCRYPT #include #elif defined(HAVE_CRYPT_H) #include #endif #include "bigcrypt.h" /* * Max cleartext password length in segments of 8 characters this * function can deal with (16 segments of 8 chars= max 128 character * password). */ #define MAX_PASS_LEN 16 #define SEGMENT_SIZE 8 #define SALT_SIZE 2 #define KEYBUF_SIZE ((MAX_PASS_LEN*SEGMENT_SIZE)+SALT_SIZE) #define ESEGMENT_SIZE 11 #define CBUF_SIZE ((MAX_PASS_LEN*ESEGMENT_SIZE)+SALT_SIZE+1) char *bigcrypt(const char *key, const char *salt) { char *dec_c2_cryptbuf; #ifdef HAVE_CRYPT_R struct crypt_data *cdata; #endif unsigned long int keylen, n_seg, j; char *cipher_ptr, *plaintext_ptr, *tmp_ptr, *salt_ptr; char keybuf[KEYBUF_SIZE + 1]; D(("called with key='%s', salt='%s'.", key, salt)); /* reset arrays */ dec_c2_cryptbuf = malloc(CBUF_SIZE); if (!dec_c2_cryptbuf) { return NULL; } #ifdef HAVE_CRYPT_R cdata = malloc(sizeof(*cdata)); if(!cdata) { free(dec_c2_cryptbuf); return NULL; } cdata->initialized = 0; #endif memset(keybuf, 0, KEYBUF_SIZE + 1); memset(dec_c2_cryptbuf, 0, CBUF_SIZE); /* fill KEYBUF_SIZE with key */ strncpy(keybuf, key, KEYBUF_SIZE); /* deal with case that we are doing a password check for a conventially encrypted password: the salt will be SALT_SIZE+ESEGMENT_SIZE long. */ if (strlen(salt) == (SALT_SIZE + ESEGMENT_SIZE)) keybuf[SEGMENT_SIZE] = '\0'; /* terminate password early(?) */ keylen = strlen(keybuf); if (!keylen) { n_seg = 1; } else { /* work out how many segments */ n_seg = 1 + ((keylen - 1) / SEGMENT_SIZE); } if (n_seg > MAX_PASS_LEN) n_seg = MAX_PASS_LEN; /* truncate at max length */ /* set up some pointers */ cipher_ptr = dec_c2_cryptbuf; plaintext_ptr = keybuf; /* do the first block with supplied salt */ #ifdef HAVE_CRYPT_R tmp_ptr = crypt_r(plaintext_ptr, salt, cdata); /* libc crypt_r() */ #else tmp_ptr = crypt(plaintext_ptr, salt); /* libc crypt() */ #endif if (tmp_ptr == NULL) { free(dec_c2_cryptbuf); return NULL; } /* and place in the static area */ strncpy(cipher_ptr, tmp_ptr, 13); cipher_ptr += ESEGMENT_SIZE + SALT_SIZE; plaintext_ptr += SEGMENT_SIZE; /* first block of SEGMENT_SIZE */ /* change the salt (1st 2 chars of previous block) - this was found by dowsing */ salt_ptr = cipher_ptr - ESEGMENT_SIZE; /* so far this is identical to "return crypt(key, salt);", if there is more than one block encrypt them... */ if (n_seg > 1) { for (j = 2; j <= n_seg; j++) { #ifdef HAVE_CRYPT_R tmp_ptr = crypt_r(plaintext_ptr, salt_ptr, cdata); #else tmp_ptr = crypt(plaintext_ptr, salt_ptr); #endif if (tmp_ptr == NULL) { _pam_overwrite(dec_c2_cryptbuf); free(dec_c2_cryptbuf); return NULL; } /* skip the salt for seg!=0 */ strncpy(cipher_ptr, (tmp_ptr + SALT_SIZE), ESEGMENT_SIZE); cipher_ptr += ESEGMENT_SIZE; plaintext_ptr += SEGMENT_SIZE; salt_ptr = cipher_ptr - ESEGMENT_SIZE; } } D(("key=|%s|, salt=|%s|\nbuf=|%s|\n", key, salt, dec_c2_cryptbuf)); #ifdef HAVE_CRYPT_R free(cdata); #endif /* this is the terminated encrypted password */ return dec_c2_cryptbuf; } Linux-PAM-1.1.8/modules/pam_unix/support.c0000644000000000000000000006340112215545527015306 00000000000000/* * Copyright information at end of file. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_RPCSVC_YPCLNT_H #include #endif #include #include #include #include #include "support.h" #include "passverify.h" #ifdef WITH_SELINUX #include #define SELINUX_ENABLED is_selinux_enabled()>0 #else #define SELINUX_ENABLED 0 #endif static char * search_key (const char *key, const char *filename) { FILE *fp; char *buf = NULL; size_t buflen = 0; char *retval = NULL; fp = fopen (filename, "r"); if (NULL == fp) return NULL; 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 = BUF_SIZE; buf = malloc (buflen); if (buf == NULL) { fclose (fp); return NULL; } } buf[0] = '\0'; if (fgets (buf, buflen - 1, fp) == NULL) break; else 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; if (strcasecmp (tmp, key) == 0) { retval = strdup (cp); break; } } fclose (fp); free (buf); return retval; } /* this is a front-end for module-application conversations */ int _make_remark(pam_handle_t * pamh, unsigned int ctrl, int type, const char *text) { int retval = PAM_SUCCESS; if (off(UNIX__QUIET, ctrl)) { retval = pam_prompt(pamh, type, NULL, "%s", text); } return retval; } /* * set the control flags for the UNIX module. */ int _set_ctrl(pam_handle_t *pamh, int flags, int *remember, int *rounds, int *pass_min_len, int argc, const char **argv) { unsigned int ctrl; char *val; int j; D(("called.")); ctrl = UNIX_DEFAULTS; /* the default selection of options */ /* set some flags manually */ if (getuid() == 0 && !(flags & PAM_CHANGE_EXPIRED_AUTHTOK)) { D(("IAMROOT")); set(UNIX__IAMROOT, ctrl); } if (flags & PAM_UPDATE_AUTHTOK) { D(("UPDATE_AUTHTOK")); set(UNIX__UPDATE, ctrl); } if (flags & PAM_PRELIM_CHECK) { D(("PRELIM_CHECK")); set(UNIX__PRELIM, ctrl); } if (flags & PAM_SILENT) { D(("SILENT")); set(UNIX__QUIET, ctrl); } /* preset encryption method with value from /etc/login.defs */ val = search_key ("ENCRYPT_METHOD", LOGIN_DEFS); if (val) { for (j = 0; j < UNIX_CTRLS_; ++j) { if (unix_args[j].token && unix_args[j].is_hash_algo && !strncasecmp(val, unix_args[j].token, strlen(unix_args[j].token))) { break; } } if (j >= UNIX_CTRLS_) { pam_syslog(pamh, LOG_WARNING, "unrecognized ENCRYPT_METHOD value [%s]", val); } else { ctrl &= unix_args[j].mask; /* for turning things off */ ctrl |= unix_args[j].flag; /* for turning things on */ } free (val); /* read number of rounds for crypt algo */ if (rounds && (on(UNIX_SHA256_PASS, ctrl) || on(UNIX_SHA512_PASS, ctrl))) { val=search_key ("SHA_CRYPT_MAX_ROUNDS", LOGIN_DEFS); if (val) { *rounds = strtol(val, NULL, 10); free (val); } } } /* now parse the arguments to this module */ for (; argc-- > 0; ++argv) { D(("pam_unix arg: %s", *argv)); for (j = 0; j < UNIX_CTRLS_; ++j) { if (unix_args[j].token && !strncmp(*argv, unix_args[j].token, strlen(unix_args[j].token))) { break; } } if (j >= UNIX_CTRLS_) { pam_syslog(pamh, LOG_ERR, "unrecognized option [%s]", *argv); } else { /* special cases */ if (j == UNIX_REMEMBER_PASSWD) { if (remember == NULL) { pam_syslog(pamh, LOG_ERR, "option remember not allowed for this module type"); continue; } *remember = strtol(*argv + 9, NULL, 10); if ((*remember == INT_MIN) || (*remember == INT_MAX)) *remember = -1; if (*remember > 400) *remember = 400; } else if (j == UNIX_MIN_PASS_LEN) { if (pass_min_len == NULL) { pam_syslog(pamh, LOG_ERR, "option minlen not allowed for this module type"); continue; } *pass_min_len = atoi(*argv + 7); } else if (j == UNIX_ALGO_ROUNDS) { if (rounds == NULL) { pam_syslog(pamh, LOG_ERR, "option rounds not allowed for this module type"); continue; } *rounds = strtol(*argv + 7, NULL, 10); } ctrl &= unix_args[j].mask; /* for turning things off */ ctrl |= unix_args[j].flag; /* for turning things on */ } } if (UNIX_DES_CRYPT(ctrl) && pass_min_len && *pass_min_len > 8) { pam_syslog (pamh, LOG_NOTICE, "Password minlen reset to 8 characters"); *pass_min_len = 8; } if (flags & PAM_DISALLOW_NULL_AUTHTOK) { D(("DISALLOW_NULL_AUTHTOK")); set(UNIX__NONULL, ctrl); } /* Set default rounds for blowfish */ if (on(UNIX_BLOWFISH_PASS, ctrl) && off(UNIX_ALGO_ROUNDS, ctrl) && rounds != NULL) { *rounds = 5; set(UNIX_ALGO_ROUNDS, ctrl); } /* Enforce sane "rounds" values */ if (on(UNIX_ALGO_ROUNDS, ctrl)) { if (on(UNIX_BLOWFISH_PASS, ctrl)) { if (*rounds < 4 || *rounds > 31) *rounds = 5; } else if (on(UNIX_SHA256_PASS, ctrl) || on(UNIX_SHA512_PASS, ctrl)) { if ((*rounds < 1000) || (*rounds == INT_MAX)) /* don't care about bogus values */ unset(UNIX_ALGO_ROUNDS, ctrl); if (*rounds >= 10000000) *rounds = 9999999; } } /* auditing is a more sensitive version of debug */ if (on(UNIX_AUDIT, ctrl)) { set(UNIX_DEBUG, ctrl); } /* return the set of flags */ D(("done.")); return ctrl; } static void _cleanup(pam_handle_t * pamh UNUSED, void *x, int error_status UNUSED) { _pam_delete(x); } /* ************************************************************** * * Useful non-trivial functions * * ************************************************************** */ /* * the following is used to keep track of the number of times a user fails * to authenticate themself. */ #define FAIL_PREFIX "-UN*X-FAIL-" #define UNIX_MAX_RETRIES 3 struct _pam_failed_auth { char *user; /* user that's failed to be authenticated */ char *name; /* attempt from user with name */ int uid; /* uid of calling user */ int euid; /* euid of calling process */ int count; /* number of failures so far */ }; #ifndef PAM_DATA_REPLACE #error "Need to get an updated libpam 0.52 or better" #endif static void _cleanup_failures(pam_handle_t * pamh, void *fl, int err) { int quiet; const void *service = NULL; const void *ruser = NULL; const void *rhost = NULL; const void *tty = NULL; struct _pam_failed_auth *failure; D(("called")); quiet = err & PAM_DATA_SILENT; /* should we log something? */ err &= PAM_DATA_REPLACE; /* are we just replacing data? */ failure = (struct _pam_failed_auth *) fl; if (failure != NULL) { if (!quiet && !err) { /* under advisement from Sun,may go away */ /* log the number of authentication failures */ if (failure->count > 1) { (void) pam_get_item(pamh, PAM_SERVICE, &service); (void) pam_get_item(pamh, PAM_RUSER, &ruser); (void) pam_get_item(pamh, PAM_RHOST, &rhost); (void) pam_get_item(pamh, PAM_TTY, &tty); pam_syslog(pamh, LOG_NOTICE, "%d more authentication failure%s; " "logname=%s uid=%d euid=%d " "tty=%s ruser=%s rhost=%s " "%s%s", failure->count - 1, failure->count == 2 ? "" : "s", failure->name, failure->uid, failure->euid, tty ? (const char *)tty : "", ruser ? (const char *)ruser : "", rhost ? (const char *)rhost : "", (failure->user && failure->user[0] != '\0') ? " user=" : "", failure->user ); if (failure->count > UNIX_MAX_RETRIES) { pam_syslog(pamh, LOG_ALERT, "service(%s) ignoring max retries; %d > %d", service == NULL ? "**unknown**" : (const char *)service, failure->count, UNIX_MAX_RETRIES); } } } _pam_delete(failure->user); /* tidy up */ _pam_delete(failure->name); /* tidy up */ free(failure); } } /* * _unix_getpwnam() searches only /etc/passwd and NIS to find user information */ static void _unix_cleanup(pam_handle_t *pamh UNUSED, void *data, int error_status UNUSED) { free(data); } int _unix_getpwnam(pam_handle_t *pamh, const char *name, int files, int nis, struct passwd **ret) { FILE *passwd; char buf[16384]; int matched = 0, buflen; char *slogin, *spasswd, *suid, *sgid, *sgecos, *shome, *sshell, *p; memset(buf, 0, sizeof(buf)); if (!matched && files) { int userlen = strlen(name); passwd = fopen("/etc/passwd", "r"); if (passwd != NULL) { while (fgets(buf, sizeof(buf), passwd) != NULL) { if ((buf[userlen] == ':') && (strncmp(name, buf, userlen) == 0)) { p = buf + strlen(buf) - 1; while (isspace(*p) && (p >= buf)) { *p-- = '\0'; } matched = 1; break; } } fclose(passwd); } } #if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined (HAVE_YP_BIND) && defined (HAVE_YP_MATCH) && defined (HAVE_YP_UNBIND) if (!matched && nis) { char *userinfo = NULL, *domain = NULL; int len = 0, i; len = yp_get_default_domain(&domain); if (len == YPERR_SUCCESS) { len = yp_bind(domain); } if (len == YPERR_SUCCESS) { i = yp_match(domain, "passwd.byname", name, strlen(name), &userinfo, &len); yp_unbind(domain); if ((i == YPERR_SUCCESS) && ((size_t)len < sizeof(buf))) { strncpy(buf, userinfo, sizeof(buf) - 1); buf[sizeof(buf) - 1] = '\0'; matched = 1; } } } #else /* we don't have NIS support, make compiler happy. */ nis = 0; #endif if (matched && (ret != NULL)) { *ret = NULL; slogin = buf; spasswd = strchr(slogin, ':'); if (spasswd == NULL) { return matched; } *spasswd++ = '\0'; suid = strchr(spasswd, ':'); if (suid == NULL) { return matched; } *suid++ = '\0'; sgid = strchr(suid, ':'); if (sgid == NULL) { return matched; } *sgid++ = '\0'; sgecos = strchr(sgid, ':'); if (sgecos == NULL) { return matched; } *sgecos++ = '\0'; shome = strchr(sgecos, ':'); if (shome == NULL) { return matched; } *shome++ = '\0'; sshell = strchr(shome, ':'); if (sshell == NULL) { return matched; } *sshell++ = '\0'; buflen = sizeof(struct passwd) + strlen(slogin) + 1 + strlen(spasswd) + 1 + strlen(sgecos) + 1 + strlen(shome) + 1 + strlen(sshell) + 1; *ret = malloc(buflen); if (*ret == NULL) { return matched; } memset(*ret, '\0', buflen); (*ret)->pw_uid = strtol(suid, &p, 10); if ((strlen(suid) == 0) || (*p != '\0')) { free(*ret); *ret = NULL; return matched; } (*ret)->pw_gid = strtol(sgid, &p, 10); if ((strlen(sgid) == 0) || (*p != '\0')) { free(*ret); *ret = NULL; return matched; } p = ((char*)(*ret)) + sizeof(struct passwd); (*ret)->pw_name = strcpy(p, slogin); p += strlen(p) + 1; (*ret)->pw_passwd = strcpy(p, spasswd); p += strlen(p) + 1; (*ret)->pw_gecos = strcpy(p, sgecos); p += strlen(p) + 1; (*ret)->pw_dir = strcpy(p, shome); p += strlen(p) + 1; (*ret)->pw_shell = strcpy(p, sshell); snprintf(buf, sizeof(buf), "_pam_unix_getpwnam_%s", name); if (pam_set_data(pamh, buf, *ret, _unix_cleanup) != PAM_SUCCESS) { free(*ret); *ret = NULL; } } return matched; } /* * _unix_comsefromsource() is a quick check to see if information about a given * user comes from a particular source (just files and nis for now) * */ int _unix_comesfromsource(pam_handle_t *pamh, const char *name, int files, int nis) { return _unix_getpwnam(pamh, name, files, nis, NULL); } /* * verify the password of a user */ #include #include static int _unix_run_helper_binary(pam_handle_t *pamh, const char *passwd, unsigned int ctrl, const char *user) { int retval, child, fds[2]; struct sigaction newsa, oldsa; D(("called.")); /* create a pipe for the password */ if (pipe(fds) != 0) { D(("could not make pipe")); return PAM_AUTH_ERR; } if (off(UNIX_NOREAP, ctrl)) { /* * This code arranges that the demise of the child does not cause * the application to receive a signal it is not expecting - which * may kill the application or worse. * * The "noreap" module argument is provided so that the admin can * override this behavior. */ memset(&newsa, '\0', sizeof(newsa)); newsa.sa_handler = SIG_DFL; sigaction(SIGCHLD, &newsa, &oldsa); } /* fork */ child = fork(); if (child == 0) { int i=0; struct rlimit rlim; static char *envp[] = { NULL }; char *args[] = { NULL, NULL, NULL, NULL }; /* XXX - should really tidy up PAM here too */ /* reopen stdin as pipe */ dup2(fds[0], STDIN_FILENO); if (getrlimit(RLIMIT_NOFILE,&rlim)==0) { if (rlim.rlim_max >= MAX_FD_NO) rlim.rlim_max = MAX_FD_NO; for (i=0; i < (int)rlim.rlim_max; i++) { if (i != STDIN_FILENO) close(i); } } if (geteuid() == 0) { /* must set the real uid to 0 so the helper will not error out if pam is called from setuid binary (su, sudo...) */ if (setuid(0) == -1) { D(("setuid failed")); _exit(PAM_AUTHINFO_UNAVAIL); } } /* exec binary helper */ args[0] = strdup(CHKPWD_HELPER); args[1] = x_strdup(user); if (off(UNIX__NONULL, ctrl)) { /* this means we've succeeded */ args[2]=strdup("nullok"); } else { args[2]=strdup("nonull"); } execve(CHKPWD_HELPER, args, envp); /* should not get here: exit with error */ D(("helper binary is not available")); _exit(PAM_AUTHINFO_UNAVAIL); } else if (child > 0) { /* wait for child */ /* if the stored password is NULL */ int rc=0; if (passwd != NULL) { /* send the password to the child */ if (write(fds[1], passwd, strlen(passwd)+1) == -1) { pam_syslog (pamh, LOG_ERR, "Cannot send password to helper: %m"); retval = PAM_AUTH_ERR; } passwd = NULL; } else { /* blank password */ if (write(fds[1], "", 1) == -1) { pam_syslog (pamh, LOG_ERR, "Cannot send password to helper: %m"); retval = PAM_AUTH_ERR; } } close(fds[0]); /* close here to avoid possible SIGPIPE above */ close(fds[1]); /* wait for helper to complete: */ while ((rc=waitpid(child, &retval, 0)) < 0 && errno == EINTR); if (rc<0) { pam_syslog(pamh, LOG_ERR, "unix_chkpwd waitpid returned %d: %m", rc); retval = PAM_AUTH_ERR; } else if (!WIFEXITED(retval)) { pam_syslog(pamh, LOG_ERR, "unix_chkpwd abnormal exit: %d", retval); retval = PAM_AUTH_ERR; } else { retval = WEXITSTATUS(retval); } } else { D(("fork failed")); close(fds[0]); close(fds[1]); retval = PAM_AUTH_ERR; } if (off(UNIX_NOREAP, ctrl)) { sigaction(SIGCHLD, &oldsa, NULL); /* restore old signal handler */ } D(("returning %d", retval)); return retval; } /* * _unix_blankpasswd() is a quick check for a blank password * * returns TRUE if user does not have a password * - to avoid prompting for one in such cases (CG) */ int _unix_blankpasswd (pam_handle_t *pamh, unsigned int ctrl, const char *name) { struct passwd *pwd = NULL; char *salt = NULL; int retval; D(("called")); /* * This function does not have to be too smart if something goes * wrong, return FALSE and let this case to be treated somewhere * else (CG) */ if (on(UNIX__NONULL, ctrl)) return 0; /* will fail but don't let on yet */ /* UNIX passwords area */ retval = get_pwd_hash(pamh, name, &pwd, &salt); if (retval == PAM_UNIX_RUN_HELPER) { /* salt will not be set here so we can return immediately */ if (_unix_run_helper_binary(pamh, NULL, ctrl, name) == PAM_SUCCESS) return 1; else return 0; } /* Does this user have a password? */ if (salt == NULL) { retval = 0; } else { if (strlen(salt) == 0) retval = 1; else retval = 0; } /* tidy up */ if (salt) _pam_delete(salt); return retval; } int _unix_verify_password(pam_handle_t * pamh, const char *name ,const char *p, unsigned int ctrl) { struct passwd *pwd = NULL; char *salt = NULL; char *data_name; int retval; D(("called")); #ifdef HAVE_PAM_FAIL_DELAY if (off(UNIX_NODELAY, ctrl)) { D(("setting delay")); (void) pam_fail_delay(pamh, 2000000); /* 2 sec delay for on failure */ } #endif /* locate the entry for this user */ D(("locating user's record")); retval = get_pwd_hash(pamh, name, &pwd, &salt); data_name = (char *) malloc(sizeof(FAIL_PREFIX) + strlen(name)); if (data_name == NULL) { pam_syslog(pamh, LOG_CRIT, "no memory for data-name"); } else { strcpy(data_name, FAIL_PREFIX); strcpy(data_name + sizeof(FAIL_PREFIX) - 1, name); } if (retval != PAM_SUCCESS) { if (retval == PAM_UNIX_RUN_HELPER) { D(("running helper binary")); retval = _unix_run_helper_binary(pamh, p, ctrl, name); } else { D(("user's record unavailable")); p = NULL; if (on(UNIX_AUDIT, ctrl)) { /* this might be a typo and the user has given a password instead of a username. Careful with this. */ pam_syslog(pamh, LOG_WARNING, "check pass; user (%s) unknown", name); } else { name = NULL; if (on(UNIX_DEBUG, ctrl) || pwd == NULL) { pam_syslog(pamh, LOG_WARNING, "check pass; user unknown"); } else { /* don't log failure as another pam module can succeed */ goto cleanup; } } } } else { retval = verify_pwd_hash(p, salt, off(UNIX__NONULL, ctrl)); } if (retval == PAM_SUCCESS) { if (data_name) /* reset failures */ pam_set_data(pamh, data_name, NULL, _cleanup_failures); } else { if (data_name != NULL) { struct _pam_failed_auth *new = NULL; const struct _pam_failed_auth *old = NULL; /* get a failure recorder */ new = (struct _pam_failed_auth *) malloc(sizeof(struct _pam_failed_auth)); if (new != NULL) { const char *login_name; const void *void_old; login_name = pam_modutil_getlogin(pamh); if (login_name == NULL) { login_name = ""; } new->user = x_strdup(name ? name : ""); new->uid = getuid(); new->euid = geteuid(); new->name = x_strdup(login_name); /* any previous failures for this user ? */ if (pam_get_data(pamh, data_name, &void_old) == PAM_SUCCESS) old = void_old; else old = NULL; if (old != NULL) { new->count = old->count + 1; if (new->count >= UNIX_MAX_RETRIES) { retval = PAM_MAXTRIES; } } else { const void *service=NULL; const void *ruser=NULL; const void *rhost=NULL; const void *tty=NULL; (void) pam_get_item(pamh, PAM_SERVICE, &service); (void) pam_get_item(pamh, PAM_RUSER, &ruser); (void) pam_get_item(pamh, PAM_RHOST, &rhost); (void) pam_get_item(pamh, PAM_TTY, &tty); pam_syslog(pamh, LOG_NOTICE, "authentication failure; " "logname=%s uid=%d euid=%d " "tty=%s ruser=%s rhost=%s " "%s%s", new->name, new->uid, new->euid, tty ? (const char *)tty : "", ruser ? (const char *)ruser : "", rhost ? (const char *)rhost : "", (new->user && new->user[0] != '\0') ? " user=" : "", new->user ); new->count = 1; } pam_set_data(pamh, data_name, new, _cleanup_failures); } else { pam_syslog(pamh, LOG_CRIT, "no memory for failure recorder"); } } } cleanup: if (data_name) _pam_delete(data_name); if (salt) _pam_delete(salt); D(("done [%d].", retval)); return retval; } /* * obtain a password from the user */ int _unix_read_password(pam_handle_t * pamh ,unsigned int ctrl ,const char *comment ,const char *prompt1 ,const char *prompt2 ,const char *data_name ,const void **pass) { int authtok_flag; int retval = PAM_SUCCESS; char *token; D(("called")); /* * make sure nothing inappropriate gets returned */ *pass = token = NULL; /* * which authentication token are we getting? */ authtok_flag = on(UNIX__OLD_PASSWD, ctrl) ? PAM_OLDAUTHTOK : PAM_AUTHTOK; /* * should we obtain the password from a PAM item ? */ if (on(UNIX_TRY_FIRST_PASS, ctrl) || on(UNIX_USE_FIRST_PASS, ctrl)) { retval = pam_get_item(pamh, authtok_flag, pass); if (retval != PAM_SUCCESS) { /* very strange. */ pam_syslog(pamh, LOG_ALERT, "pam_get_item returned error to unix-read-password" ); return retval; } else if (*pass != NULL) { /* we have a password! */ return PAM_SUCCESS; } else if (on(UNIX_USE_AUTHTOK, ctrl) && off(UNIX__OLD_PASSWD, ctrl)) { return PAM_AUTHTOK_ERR; } else if (on(UNIX_USE_FIRST_PASS, ctrl)) { return PAM_AUTHTOK_RECOVERY_ERR; /* didn't work */ } } /* * getting here implies we will have to get the password from the * user directly. */ { int replies=1; char *resp[2] = { NULL, NULL }; if (comment != NULL && off(UNIX__QUIET, ctrl)) { retval = pam_info(pamh, "%s", comment); } if (retval == PAM_SUCCESS) { retval = pam_prompt(pamh, PAM_PROMPT_ECHO_OFF, &resp[0], "%s", prompt1); if (retval == PAM_SUCCESS && prompt2 != NULL) { retval = pam_prompt(pamh, PAM_PROMPT_ECHO_OFF, &resp[1], "%s", prompt2); ++replies; } } if (resp[0] != NULL && resp[replies-1] != NULL) { /* interpret the response */ if (retval == PAM_SUCCESS) { /* a good conversation */ token = resp[0]; if (token != NULL) { if (replies == 2) { /* verify that password entered correctly */ if (strcmp(token, resp[replies - 1])) { /* mistyped */ retval = PAM_AUTHTOK_RECOVERY_ERR; _make_remark(pamh, ctrl, PAM_ERROR_MSG, MISTYPED_PASS); } } } else { pam_syslog(pamh, LOG_NOTICE, "could not recover authentication token"); } } } else { retval = (retval == PAM_SUCCESS) ? PAM_AUTHTOK_RECOVERY_ERR : retval; } resp[0] = NULL; if (replies > 1) _pam_delete(resp[1]); } if (retval != PAM_SUCCESS) { _pam_delete(token); if (on(UNIX_DEBUG, ctrl)) pam_syslog(pamh, LOG_DEBUG, "unable to obtain a password"); return retval; } /* 'token' is the entered password */ if (off(UNIX_NOT_SET_PASS, ctrl)) { /* we store this password as an item */ retval = pam_set_item(pamh, authtok_flag, token); _pam_delete(token); /* clean it up */ if (retval != PAM_SUCCESS || (retval = pam_get_item(pamh, authtok_flag, pass)) != PAM_SUCCESS) { *pass = NULL; pam_syslog(pamh, LOG_CRIT, "error manipulating password"); return retval; } } else { /* * then store it as data specific to this module. pam_end() * will arrange to clean it up. */ retval = pam_set_data(pamh, data_name, (void *) token, _cleanup); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_CRIT, "error manipulating password data [%s]", pam_strerror(pamh, retval)); _pam_delete(token); return retval; } *pass = token; token = NULL; /* break link to password */ } return PAM_SUCCESS; } /* ****************************************************************** * * Copyright (c) Jan Rêkorajski 1999. * Copyright (c) Andrew G. Morgan 1996-8. * Copyright (c) Alex O. Yuriev, 1996. * Copyright (c) Cristian Gafton 1996. * Copyright (c) Red Hat, Inc. 2007. * * 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. */ Linux-PAM-1.1.8/modules/pam_unix/pam_unix_acct.c0000644000000000000000000002146212215545527016405 00000000000000/* * Copyright Elliot Lee, 1996. All rights reserved. * Copyright Jan Rkorajski, 1999. 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, 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. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include /* for time() */ #include #include #include /* indicate that the following groups are defined */ #ifdef PAM_STATIC # include "pam_unix_static.h" #else # define PAM_SM_ACCOUNT #endif #include #include #include #include "support.h" #include "passverify.h" int _unix_run_verify_binary(pam_handle_t *pamh, unsigned int ctrl, const char *user, int *daysleft) { int retval=0, child, fds[2]; struct sigaction newsa, oldsa; D(("running verify_binary")); /* create a pipe for the messages */ if (pipe(fds) != 0) { D(("could not make pipe")); pam_syslog(pamh, LOG_ERR, "Could not make pipe: %m"); return PAM_AUTH_ERR; } D(("called.")); if (off(UNIX_NOREAP, ctrl)) { /* * This code arranges that the demise of the child does not cause * the application to receive a signal it is not expecting - which * may kill the application or worse. * * The "noreap" module argument is provided so that the admin can * override this behavior. */ memset(&newsa, '\0', sizeof(newsa)); newsa.sa_handler = SIG_DFL; sigaction(SIGCHLD, &newsa, &oldsa); } /* fork */ child = fork(); if (child == 0) { int i=0; struct rlimit rlim; static char *envp[] = { NULL }; char *args[] = { NULL, NULL, NULL, NULL }; /* reopen stdout as pipe */ dup2(fds[1], STDOUT_FILENO); /* XXX - should really tidy up PAM here too */ if (getrlimit(RLIMIT_NOFILE,&rlim)==0) { if (rlim.rlim_max >= MAX_FD_NO) rlim.rlim_max = MAX_FD_NO; for (i=0; i < (int)rlim.rlim_max; i++) { if (i != STDOUT_FILENO) { close(i); } } } if (geteuid() == 0) { /* must set the real uid to 0 so the helper will not error out if pam is called from setuid binary (su, sudo...) */ if (setuid(0) == -1) { pam_syslog(pamh, LOG_ERR, "setuid failed: %m"); printf("-1\n"); fflush(stdout); _exit(PAM_AUTHINFO_UNAVAIL); } } /* exec binary helper */ args[0] = x_strdup(CHKPWD_HELPER); args[1] = x_strdup(user); args[2] = x_strdup("chkexpiry"); execve(CHKPWD_HELPER, args, envp); pam_syslog(pamh, LOG_ERR, "helper binary execve failed: %m"); /* should not get here: exit with error */ D(("helper binary is not available")); printf("-1\n"); fflush(stdout); _exit(PAM_AUTHINFO_UNAVAIL); } else { close(fds[1]); if (child > 0) { char buf[32]; int rc=0; /* wait for helper to complete: */ while ((rc=waitpid(child, &retval, 0)) < 0 && errno == EINTR); if (rc<0) { pam_syslog(pamh, LOG_ERR, "unix_chkpwd waitpid returned %d: %m", rc); retval = PAM_AUTH_ERR; } else if (!WIFEXITED(retval)) { pam_syslog(pamh, LOG_ERR, "unix_chkpwd abnormal exit: %d", retval); retval = PAM_AUTH_ERR; } else { retval = WEXITSTATUS(retval); rc = pam_modutil_read(fds[0], buf, sizeof(buf) - 1); if(rc > 0) { buf[rc] = '\0'; if (sscanf(buf,"%d", daysleft) != 1 ) retval = PAM_AUTH_ERR; } else { pam_syslog(pamh, LOG_ERR, "read unix_chkpwd output error %d: %m", rc); retval = PAM_AUTH_ERR; } } } else { pam_syslog(pamh, LOG_ERR, "Fork failed: %m"); D(("fork failed")); retval = PAM_AUTH_ERR; } close(fds[0]); } if (off(UNIX_NOREAP, ctrl)) { sigaction(SIGCHLD, &oldsa, NULL); /* restore old signal handler */ } D(("Returning %d",retval)); return retval; } /* * PAM framework looks for this entry-point to pass control to the * account management module. */ int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) { unsigned int ctrl; const void *void_uname; const char *uname; int retval, daysleft; struct spwd *spent; struct passwd *pwent; char buf[256]; D(("called.")); ctrl = _set_ctrl(pamh, flags, NULL, NULL, NULL, argc, argv); retval = pam_get_item(pamh, PAM_USER, &void_uname); uname = void_uname; D(("user = `%s'", uname)); if (retval != PAM_SUCCESS || uname == NULL) { pam_syslog(pamh, LOG_ALERT, "could not identify user (from uid=%lu)", (unsigned long int)getuid()); return PAM_USER_UNKNOWN; } retval = get_account_info(pamh, uname, &pwent, &spent); if (retval == PAM_USER_UNKNOWN) { pam_syslog(pamh, LOG_ALERT, "could not identify user (from getpwnam(%s))", uname); return retval; } if (retval == PAM_SUCCESS && spent == NULL) return PAM_SUCCESS; if (retval == PAM_UNIX_RUN_HELPER) { retval = _unix_run_verify_binary(pamh, ctrl, uname, &daysleft); if (retval == PAM_AUTHINFO_UNAVAIL && on(UNIX_BROKEN_SHADOW, ctrl)) return PAM_SUCCESS; } else if (retval != PAM_SUCCESS) { if (on(UNIX_BROKEN_SHADOW,ctrl)) return PAM_SUCCESS; else return retval; } else retval = check_shadow_expiry(pamh, spent, &daysleft); switch (retval) { case PAM_ACCT_EXPIRED: pam_syslog(pamh, LOG_NOTICE, "account %s has expired (account expired)", uname); _make_remark(pamh, ctrl, PAM_ERROR_MSG, _("Your account has expired; please contact your system administrator")); break; case PAM_NEW_AUTHTOK_REQD: if (daysleft == 0) { pam_syslog(pamh, LOG_NOTICE, "expired password for user %s (root enforced)", uname); _make_remark(pamh, ctrl, PAM_ERROR_MSG, _("You are required to change your password immediately (root enforced)")); } else { pam_syslog(pamh, LOG_DEBUG, "expired password for user %s (password aged)", uname); _make_remark(pamh, ctrl, PAM_ERROR_MSG, _("You are required to change your password immediately (password aged)")); } break; case PAM_AUTHTOK_EXPIRED: pam_syslog(pamh, LOG_NOTICE, "account %s has expired (failed to change password)", uname); _make_remark(pamh, ctrl, PAM_ERROR_MSG, _("Your account has expired; please contact your system administrator")); break; case PAM_AUTHTOK_ERR: retval = PAM_SUCCESS; /* fallthrough */ case PAM_SUCCESS: if (daysleft >= 0) { pam_syslog(pamh, LOG_DEBUG, "password for user %s will expire in %d days", uname, daysleft); #if defined HAVE_DNGETTEXT && defined ENABLE_NLS snprintf (buf, sizeof (buf), dngettext(PACKAGE, "Warning: your password will expire in %d day", "Warning: your password will expire in %d days", daysleft), daysleft); #else if (daysleft == 1) snprintf(buf, sizeof (buf), _("Warning: your password will expire in %d day"), daysleft); else snprintf(buf, sizeof (buf), /* TRANSLATORS: only used if dngettext is not supported */ _("Warning: your password will expire in %d days"), daysleft); #endif _make_remark(pamh, ctrl, PAM_TEXT_INFO, buf); } } D(("all done")); return retval; } Linux-PAM-1.1.8/modules/pam_unix/yppasswd_xdr.c0000644000000000000000000000174212160065211016303 00000000000000/* * yppasswdd * Copyright 1994, 1995, 1996 Olaf Kirch, * * This program is covered by the GNU General Public License, version 2 * or later. It is provided in the hope that it is useful. However, the author * disclaims ALL WARRANTIES, expressed or implied. See the GPL for details. * * This file was generated automatically by rpcgen from yppasswd.x, and * editied manually. */ #include "config.h" #ifdef HAVE_RPC_RPC_H #include #include "yppasswd.h" bool_t xdr_xpasswd(XDR * xdrs, xpasswd * objp) { return xdr_string(xdrs, &objp->pw_name, ~0) && xdr_string(xdrs, &objp->pw_passwd, ~0) && xdr_int(xdrs, &objp->pw_uid) && xdr_int(xdrs, &objp->pw_gid) && xdr_string(xdrs, &objp->pw_gecos, ~0) && xdr_string(xdrs, &objp->pw_dir, ~0) && xdr_string(xdrs, &objp->pw_shell, ~0); } bool_t xdr_yppasswd(XDR * xdrs, yppasswd * objp) { return xdr_string(xdrs, &objp->oldpass, ~0) && xdr_xpasswd(xdrs, &objp->newpw); } #endif Linux-PAM-1.1.8/modules/pam_unix/pam_unix.80000644000000000000000000001741312216527615015340 00000000000000'\" t .\" Title: pam_unix .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_UNIX" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_unix \- Module for traditional password authentication .SH "SYNOPSIS" .HP \w'\fBpam_unix\&.so\fR\ 'u \fBpam_unix\&.so\fR [\&.\&.\&.] .SH "DESCRIPTION" .PP This is the standard Unix authentication module\&. It uses standard calls from the system\*(Aqs libraries to retrieve and set account information as well as authentication\&. Usually this is obtained from the /etc/passwd and the /etc/shadow file as well if shadow is enabled\&. .PP The account component performs the task of establishing the status of the user\*(Aqs account and password based on the following \fIshadow\fR elements: expire, last_change, max_change, min_change, warn_change\&. In the case of the latter, it may offer advice to the user on changing their password or, through the \fBPAM_AUTHTOKEN_REQD\fR return, delay giving service to the user until they have established a new password\&. The entries listed above are documented in the \fBshadow\fR(5) manual page\&. Should the user\*(Aqs record not contain one or more of these entries, the corresponding \fIshadow\fR check is not performed\&. .PP The authentication component performs the task of checking the users credentials (password)\&. The default action of this module is to not permit the user access to a service if their official password is blank\&. .PP A helper binary, \fBunix_chkpwd\fR(8), is provided to check the user\*(Aqs password when it is stored in a read protected database\&. This binary is very simple and will only check the password of the user invoking it\&. It is called transparently on behalf of the user by the authenticating component of this module\&. In this way it is possible for applications like \fBxlock\fR(1) to work without being setuid\-root\&. The module, by default, will temporarily turn off SIGCHLD handling for the duration of execution of the helper binary\&. This is generally the right thing to do, as many applications are not prepared to handle this signal from a child they didn\*(Aqt know was \fBfork()\fRd\&. The \fBnoreap\fR module argument can be used to suppress this temporary shielding and may be needed for use with certain applications\&. .PP The password component of this module performs the task of updating the user\*(Aqs password\&. The default encryption hash is taken from the \fBENCRYPT_METHOD\fR variable from \fI/etc/login\&.defs\fR .PP The session component of this module logs when a user logins or leave the system\&. .PP Remaining arguments, supported by others functions of this module, are silently ignored\&. Other arguments are logged as errors through \fBsyslog\fR(3)\&. .SH "OPTIONS" .PP \fBdebug\fR .RS 4 Turns on debugging via \fBsyslog\fR(3)\&. .RE .PP \fBaudit\fR .RS 4 A little more extreme than debug\&. .RE .PP \fBnullok\fR .RS 4 The default action of this module is to not permit the user access to a service if their official password is blank\&. The \fBnullok\fR argument overrides this default\&. .RE .PP \fBtry_first_pass\fR .RS 4 Before prompting the user for their password, the module first tries the previous stacked module\*(Aqs password in case that satisfies this module as well\&. .RE .PP \fBuse_first_pass\fR .RS 4 The argument \fBuse_first_pass\fR forces the module to use a previous stacked modules password and will never prompt the user \- if no password is available or the password is not appropriate, the user will be denied access\&. .RE .PP \fBnodelay\fR .RS 4 This argument can be used to discourage the authentication component from requesting a delay should the authentication as a whole fail\&. The default action is for the module to request a delay\-on\-failure of the order of two second\&. .RE .PP \fBuse_authtok\fR .RS 4 When password changing enforce the module to set the new password to the one provided by a previously stacked \fBpassword\fR module (this is used in the example of the stacking of the \fBpam_cracklib\fR module documented below)\&. .RE .PP \fBnot_set_pass\fR .RS 4 This argument is used to inform the module that it is not to pay attention to/make available the old or new passwords from/to other (stacked) password modules\&. .RE .PP \fBnis\fR .RS 4 NIS RPC is used for setting new passwords\&. .RE .PP \fBremember=\fR\fB\fIn\fR\fR .RS 4 The last \fIn\fR passwords for each user are saved in /etc/security/opasswd in order to force password change history and keep the user from alternating between the same password too frequently\&. Instead of this option the \fBpam_pwhistory\fR module should be used\&. .RE .PP \fBshadow\fR .RS 4 Try to maintain a shadow based system\&. .RE .PP \fBmd5\fR .RS 4 When a user changes their password next, encrypt it with the MD5 algorithm\&. .RE .PP \fBbigcrypt\fR .RS 4 When a user changes their password next, encrypt it with the DEC C2 algorithm\&. .RE .PP \fBsha256\fR .RS 4 When a user changes their password next, encrypt it with the SHA256 algorithm\&. If the SHA256 algorithm is not known to the \fBcrypt\fR(3) function, fall back to MD5\&. .RE .PP \fBsha512\fR .RS 4 When a user changes their password next, encrypt it with the SHA512 algorithm\&. If the SHA512 algorithm is not known to the \fBcrypt\fR(3) function, fall back to MD5\&. .RE .PP \fBblowfish\fR .RS 4 When a user changes their password next, encrypt it with the blowfish algorithm\&. If the blowfish algorithm is not known to the \fBcrypt\fR(3) function, fall back to MD5\&. .RE .PP \fBrounds=\fR\fB\fIn\fR\fR .RS 4 Set the optional number of rounds of the SHA256, SHA512 and blowfish password hashing algorithms to \fIn\fR\&. .RE .PP \fBbroken_shadow\fR .RS 4 Ignore errors reading shadow information for users in the account management module\&. .RE .PP \fBminlen=\fR\fB\fIn\fR\fR .RS 4 Set a minimum password length of \fIn\fR characters\&. The max\&. for DES crypt based passwords are 8 characters\&. .RE .PP Invalid arguments are logged with \fBsyslog\fR(3)\&. .SH "MODULE TYPES PROVIDED" .PP All module types (\fBaccount\fR, \fBauth\fR, \fBpassword\fR and \fBsession\fR) are provided\&. .SH "RETURN VALUES" .PP PAM_IGNORE .RS 4 Ignore this module\&. .RE .SH "EXAMPLES" .PP An example usage for /etc/pam\&.d/login would be: .sp .if n \{\ .RS 4 .\} .nf # Authenticate the user auth required pam_unix\&.so # Ensure users account and password are still active account required pam_unix\&.so # Change the users password, but at first check the strength # with pam_cracklib(8) password required pam_cracklib\&.so retry=3 minlen=6 difok=3 password required pam_unix\&.so use_authtok nullok md5 session required pam_unix\&.so .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBlogin.defs\fR(5), \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_unix was written by various people\&. Linux-PAM-1.1.8/modules/pam_unix/pam_unix_static.h0000644000000000000000000000046012160065211016744 00000000000000#define pam_sm_acct_mgmt _pam_unix_sm_acct_mgmt #define pam_sm_authenticate _pam_unix_sm_authenticate #define pam_sm_setcred _pam_unix_sm_setcred #define pam_sm_chauthtok _pam_unix_sm_chauthtok #define pam_sm_open_session _pam_unix_sm_open_session #define pam_sm_close_session _pam_unix_sm_close_session Linux-PAM-1.1.8/modules/pam_unix/unix_chkpwd.c0000644000000000000000000001526412160065211016103 00000000000000/* * This program is designed to run setuid(root) or with sufficient * privilege to read all of the unix password databases. It is designed * to provide a mechanism for the current user (defined by this * process' uid) to verify their own password. * * The password is read from the standard input. The exit status of * this program indicates whether the user is authenticated or not. * * Copyright information is located at the end of the file. * */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_LIBAUDIT #include #endif #include #include #include "passverify.h" static int _check_expiry(const char *uname) { struct spwd *spent; struct passwd *pwent; int retval; int daysleft; retval = get_account_info(uname, &pwent, &spent); if (retval != PAM_SUCCESS) { helper_log_err(LOG_ALERT, "could not obtain user info (%s)", uname); printf("-1\n"); return retval; } if (spent == NULL) { printf("-1\n"); return retval; } retval = check_shadow_expiry(spent, &daysleft); printf("%d\n", daysleft); return retval; } #ifdef HAVE_LIBAUDIT static int _audit_log(int type, const char *uname, int rc) { int audit_fd; audit_fd = audit_open(); if (audit_fd < 0) { /* You get these error codes only when the kernel doesn't have * audit compiled in. */ if (errno == EINVAL || errno == EPROTONOSUPPORT || errno == EAFNOSUPPORT) return PAM_SUCCESS; helper_log_err(LOG_CRIT, "audit_open() failed: %m"); return PAM_AUTH_ERR; } rc = audit_log_acct_message(audit_fd, type, NULL, "PAM:unix_chkpwd", uname, -1, NULL, NULL, NULL, rc == PAM_SUCCESS); if (rc == -EPERM && geteuid() != 0) { rc = 0; } audit_close(audit_fd); return rc < 0 ? PAM_AUTH_ERR : PAM_SUCCESS; } #endif int main(int argc, char *argv[]) { char pass[MAXPASS + 1]; char *option; int npass, nullok; int blankpass = 0; int retval = PAM_AUTH_ERR; char *user; char *passwords[] = { pass }; /* * Catch or ignore as many signal as possible. */ setup_signals(); /* * we establish that this program is running with non-tty stdin. * this is to discourage casual use. It does *NOT* prevent an * intruder from repeatadly running this program to determine the * password of the current user (brute force attack, but one for * which the attacker must already have gained access to the user's * account). */ if (isatty(STDIN_FILENO) || argc != 3 ) { helper_log_err(LOG_NOTICE ,"inappropriate use of Unix helper binary [UID=%d]" ,getuid()); #ifdef HAVE_LIBAUDIT _audit_log(AUDIT_ANOM_EXEC, getuidname(getuid()), PAM_SYSTEM_ERR); #endif fprintf(stderr ,"This binary is not designed for running in this way\n" "-- the system administrator has been informed\n"); sleep(10); /* this should discourage/annoy the user */ return PAM_SYSTEM_ERR; } /* * Determine what the current user's name is. * We must thus skip the check if the real uid is 0. */ if (getuid() == 0) { user=argv[1]; } else { user = getuidname(getuid()); /* if the caller specifies the username, verify that user matches it */ if (strcmp(user, argv[1])) { user = argv[1]; /* no match -> permanently change to the real user and proceed */ if (setuid(getuid()) != 0) return PAM_AUTH_ERR; } } option=argv[2]; if (strcmp(option, "chkexpiry") == 0) /* Check account information from the shadow file */ return _check_expiry(argv[1]); /* read the nullok/nonull option */ else if (strcmp(option, "nullok") == 0) nullok = 1; else if (strcmp(option, "nonull") == 0) nullok = 0; else { #ifdef HAVE_LIBAUDIT _audit_log(AUDIT_ANOM_EXEC, getuidname(getuid()), PAM_SYSTEM_ERR); #endif return PAM_SYSTEM_ERR; } /* read the password from stdin (a pipe from the pam_unix module) */ npass = read_passwords(STDIN_FILENO, 1, passwords); if (npass != 1) { /* is it a valid password? */ helper_log_err(LOG_DEBUG, "no password supplied"); *pass = '\0'; } if (*pass == '\0') { blankpass = 1; } retval = helper_verify_password(user, pass, nullok); memset(pass, '\0', MAXPASS); /* clear memory of the password */ /* return pass or fail */ if (retval != PAM_SUCCESS) { if (!nullok || !blankpass) { /* no need to log blank pass test */ #ifdef HAVE_LIBAUDIT if (getuid() != 0) _audit_log(AUDIT_USER_AUTH, user, PAM_AUTH_ERR); #endif helper_log_err(LOG_NOTICE, "password check failed for user (%s)", user); } return PAM_AUTH_ERR; } else { if (getuid() != 0) { #ifdef HAVE_LIBAUDIT return _audit_log(AUDIT_USER_AUTH, user, PAM_SUCCESS); #else return PAM_SUCCESS; #endif } return PAM_SUCCESS; } } /* * Copyright (c) Andrew G. Morgan, 1996. All rights reserved * Copyright (c) Red Hat, Inc., 2007,2008. 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, 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. */ Linux-PAM-1.1.8/modules/pam_unix/bigcrypt_main.c0000644000000000000000000000047212160065211016402 00000000000000#include #include #include "bigcrypt.h" int main(int argc, char **argv) { if (argc < 3) { fprintf(stderr, "Usage: %s password salt\n", strchr(argv[0], '/') ? (strchr(argv[0], '/') + 1) : argv[0]); return 0; } fprintf(stdout, "%s\n", bigcrypt(argv[1], argv[2])); return 0; } Linux-PAM-1.1.8/modules/pam_unix/pam_unix_passwd.c0000644000000000000000000005353612215545333016776 00000000000000/* * Main coding by Elliot Lee , Red Hat Software. * Copyright (C) 1996. * Copyright (c) Jan Rêkorajski, 1999. * Copyright (c) Red Hat, Inc., 2007, 2008. * * 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. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include /* for time() */ #include #include #include #include #include #include #include #include #include /* indicate the following groups are defined */ #ifdef PAM_STATIC # include "pam_unix_static.h" #else # define PAM_SM_PASSWORD #endif #include #include #include #include "md5.h" #include "support.h" #include "passverify.h" #include "bigcrypt.h" #if (HAVE_YP_GET_DEFAULT_DOMAIN || HAVE_GETDOMAINNAME) && HAVE_YP_MASTER # define HAVE_NIS #endif #ifdef HAVE_NIS # include # if HAVE_RPCSVC_YP_PROT_H # include # endif # if HAVE_RPCSVC_YPCLNT_H # include # endif # include "yppasswd.h" # if !HAVE_DECL_GETRPCPORT extern int getrpcport(const char *host, unsigned long prognum, unsigned long versnum, unsigned int proto); # endif /* GNU libc 2.1 */ #endif /* How it works: Gets in username (has to be done) from the calling program Does authentication of user (only if we are not running as root) Gets new password/checks for sanity Sets it. */ /* data tokens */ #define _UNIX_OLD_AUTHTOK "-UN*X-OLD-PASS" #define _UNIX_NEW_AUTHTOK "-UN*X-NEW-PASS" #define MAX_PASSWD_TRIES 3 #ifdef HAVE_NIS static char *getNISserver(pam_handle_t *pamh, unsigned int ctrl) { char *master; char *domainname; int port, err; #ifdef HAVE_YP_GET_DEFAULT_DOMAIN if ((err = yp_get_default_domain(&domainname)) != 0) { pam_syslog(pamh, LOG_WARNING, "can't get local yp domain: %s", yperr_string(err)); return NULL; } #elif defined(HAVE_GETDOMAINNAME) char domainname_res[256]; if (getdomainname (domainname_res, sizeof (domainname_res)) == 0) { if (strcmp (domainname_res, "(none)") == 0) { /* If domainname is not set, some systems will return "(none)" */ domainname_res[0] = '\0'; } domainname = domainname_res; } else domainname = NULL; #endif if ((err = yp_master(domainname, "passwd.byname", &master)) != 0) { pam_syslog(pamh, LOG_WARNING, "can't find the master ypserver: %s", yperr_string(err)); return NULL; } port = getrpcport(master, YPPASSWDPROG, YPPASSWDPROC_UPDATE, IPPROTO_UDP); if (port == 0) { pam_syslog(pamh, LOG_WARNING, "yppasswdd not running on NIS master host"); return NULL; } if (port >= IPPORT_RESERVED) { pam_syslog(pamh, LOG_WARNING, "yppasswd daemon running on illegal port"); return NULL; } if (on(UNIX_DEBUG, ctrl)) { pam_syslog(pamh, LOG_DEBUG, "Use NIS server on %s with port %d", master, port); } return master; } #endif #ifdef WITH_SELINUX static int _unix_run_update_binary(pam_handle_t *pamh, unsigned int ctrl, const char *user, const char *fromwhat, const char *towhat, int remember) { int retval, child, fds[2]; struct sigaction newsa, oldsa; D(("called.")); /* create a pipe for the password */ if (pipe(fds) != 0) { D(("could not make pipe")); return PAM_AUTH_ERR; } if (off(UNIX_NOREAP, ctrl)) { /* * This code arranges that the demise of the child does not cause * the application to receive a signal it is not expecting - which * may kill the application or worse. * * The "noreap" module argument is provided so that the admin can * override this behavior. */ memset(&newsa, '\0', sizeof(newsa)); newsa.sa_handler = SIG_DFL; sigaction(SIGCHLD, &newsa, &oldsa); } /* fork */ child = fork(); if (child == 0) { int i=0; struct rlimit rlim; static char *envp[] = { NULL }; char *args[] = { NULL, NULL, NULL, NULL, NULL, NULL }; char buffer[16]; /* XXX - should really tidy up PAM here too */ /* reopen stdin as pipe */ dup2(fds[0], STDIN_FILENO); if (getrlimit(RLIMIT_NOFILE,&rlim)==0) { if (rlim.rlim_max >= MAX_FD_NO) rlim.rlim_max = MAX_FD_NO; for (i=0; i < (int)rlim.rlim_max; i++) { if (i != STDIN_FILENO) close(i); } } /* exec binary helper */ args[0] = x_strdup(UPDATE_HELPER); args[1] = x_strdup(user); args[2] = x_strdup("update"); if (on(UNIX_SHADOW, ctrl)) args[3] = x_strdup("1"); else args[3] = x_strdup("0"); snprintf(buffer, sizeof(buffer), "%d", remember); args[4] = x_strdup(buffer); execve(UPDATE_HELPER, args, envp); /* should not get here: exit with error */ D(("helper binary is not available")); _exit(PAM_AUTHINFO_UNAVAIL); } else if (child > 0) { /* wait for child */ /* if the stored password is NULL */ int rc=0; if (fromwhat) pam_modutil_write(fds[1], fromwhat, strlen(fromwhat)+1); else pam_modutil_write(fds[1], "", 1); if (towhat) { pam_modutil_write(fds[1], towhat, strlen(towhat)+1); } else pam_modutil_write(fds[1], "", 1); close(fds[0]); /* close here to avoid possible SIGPIPE above */ close(fds[1]); /* wait for helper to complete: */ while ((rc=waitpid(child, &retval, 0)) < 0 && errno == EINTR); if (rc<0) { pam_syslog(pamh, LOG_ERR, "unix_update waitpid failed: %m"); retval = PAM_AUTHTOK_ERR; } else if (!WIFEXITED(retval)) { pam_syslog(pamh, LOG_ERR, "unix_update abnormal exit: %d", retval); retval = PAM_AUTHTOK_ERR; } else { retval = WEXITSTATUS(retval); } } else { D(("fork failed")); close(fds[0]); close(fds[1]); retval = PAM_AUTH_ERR; } if (off(UNIX_NOREAP, ctrl)) { sigaction(SIGCHLD, &oldsa, NULL); /* restore old signal handler */ } return retval; } #endif static int check_old_password(const char *forwho, const char *newpass) { static char buf[16384]; char *s_luser, *s_uid, *s_npas, *s_pas; int retval = PAM_SUCCESS; FILE *opwfile; size_t len = strlen(forwho); opwfile = fopen(OLD_PASSWORDS_FILE, "r"); if (opwfile == NULL) return PAM_ABORT; while (fgets(buf, 16380, opwfile)) { if (!strncmp(buf, forwho, len) && (buf[len] == ':' || buf[len] == ',')) { char *sptr; buf[strlen(buf) - 1] = '\0'; s_luser = strtok_r(buf, ":,", &sptr); s_uid = strtok_r(NULL, ":,", &sptr); s_npas = strtok_r(NULL, ":,", &sptr); s_pas = strtok_r(NULL, ":,", &sptr); while (s_pas != NULL) { char *md5pass = Goodcrypt_md5(newpass, s_pas); if (!strcmp(md5pass, s_pas)) { _pam_delete(md5pass); retval = PAM_AUTHTOK_ERR; break; } s_pas = strtok_r(NULL, ":,", &sptr); _pam_delete(md5pass); } break; } } fclose(opwfile); return retval; } static int _do_setpass(pam_handle_t* pamh, const char *forwho, const char *fromwhat, char *towhat, unsigned int ctrl, int remember) { struct passwd *pwd = NULL; int retval = 0; int unlocked = 0; char *master = NULL; D(("called")); pwd = getpwnam(forwho); if (pwd == NULL) { retval = PAM_AUTHTOK_ERR; goto done; } if (on(UNIX_NIS, ctrl) && _unix_comesfromsource(pamh, forwho, 0, 1)) { #ifdef HAVE_NIS if ((master=getNISserver(pamh, ctrl)) != NULL) { struct timeval timeout; struct yppasswd yppwd; CLIENT *clnt; int status; enum clnt_stat err; /* Unlock passwd file to avoid deadlock */ unlock_pwdf(); unlocked = 1; /* Initialize password information */ yppwd.newpw.pw_passwd = pwd->pw_passwd; yppwd.newpw.pw_name = pwd->pw_name; yppwd.newpw.pw_uid = pwd->pw_uid; yppwd.newpw.pw_gid = pwd->pw_gid; yppwd.newpw.pw_gecos = pwd->pw_gecos; yppwd.newpw.pw_dir = pwd->pw_dir; yppwd.newpw.pw_shell = pwd->pw_shell; yppwd.oldpass = fromwhat ? strdup (fromwhat) : strdup (""); yppwd.newpw.pw_passwd = towhat; D(("Set password %s for %s", yppwd.newpw.pw_passwd, forwho)); /* The yppasswd.x file said `unix authentication required', * so I added it. This is the only reason it is in here. * My yppasswdd doesn't use it, but maybe some others out there * do. --okir */ clnt = clnt_create(master, YPPASSWDPROG, YPPASSWDVERS, "udp"); clnt->cl_auth = authunix_create_default(); memset((char *) &status, '\0', sizeof(status)); timeout.tv_sec = 25; timeout.tv_usec = 0; err = clnt_call(clnt, YPPASSWDPROC_UPDATE, (xdrproc_t) xdr_yppasswd, (char *) &yppwd, (xdrproc_t) xdr_int, (char *) &status, timeout); free (yppwd.oldpass); if (err) { _make_remark(pamh, ctrl, PAM_TEXT_INFO, clnt_sperrno(err)); } else if (status) { D(("Error while changing NIS password.\n")); } D(("The password has%s been changed on %s.", (err || status) ? " not" : "", master)); pam_syslog(pamh, LOG_NOTICE, "password%s changed for %s on %s", (err || status) ? " not" : "", pwd->pw_name, master); auth_destroy(clnt->cl_auth); clnt_destroy(clnt); if (err || status) { _make_remark(pamh, ctrl, PAM_TEXT_INFO, _("NIS password could not be changed.")); retval = PAM_TRY_AGAIN; } #ifdef PAM_DEBUG sleep(5); #endif } else { retval = PAM_TRY_AGAIN; } #else if (on(UNIX_DEBUG, ctrl)) { pam_syslog(pamh, LOG_DEBUG, "No NIS support available"); } retval = PAM_TRY_AGAIN; #endif } if (_unix_comesfromsource(pamh, forwho, 1, 0)) { if(unlocked) { if (lock_pwdf() != PAM_SUCCESS) { return PAM_AUTHTOK_LOCK_BUSY; } } #ifdef WITH_SELINUX if (unix_selinux_confined()) return _unix_run_update_binary(pamh, ctrl, forwho, fromwhat, towhat, remember); #endif /* first, save old password */ if (save_old_password(pamh, forwho, fromwhat, remember)) { retval = PAM_AUTHTOK_ERR; goto done; } if (on(UNIX_SHADOW, ctrl) || is_pwd_shadowed(pwd)) { retval = unix_update_shadow(pamh, forwho, towhat); if (retval == PAM_SUCCESS) if (!is_pwd_shadowed(pwd)) retval = unix_update_passwd(pamh, forwho, "x"); } else { retval = unix_update_passwd(pamh, forwho, towhat); } } done: unlock_pwdf(); return retval; } static int _unix_verify_shadow(pam_handle_t *pamh, const char *user, unsigned int ctrl) { struct passwd *pwent = NULL; /* Password and shadow password */ struct spwd *spent = NULL; /* file entries for the user */ int daysleft; int retval; retval = get_account_info(pamh, user, &pwent, &spent); if (retval == PAM_USER_UNKNOWN) { return retval; } if (retval == PAM_SUCCESS && spent == NULL) return PAM_SUCCESS; if (retval == PAM_UNIX_RUN_HELPER) { retval = _unix_run_verify_binary(pamh, ctrl, user, &daysleft); if (retval == PAM_AUTH_ERR || retval == PAM_USER_UNKNOWN) return retval; } else if (retval == PAM_SUCCESS) retval = check_shadow_expiry(pamh, spent, &daysleft); if (on(UNIX__IAMROOT, ctrl) || retval == PAM_NEW_AUTHTOK_REQD) return PAM_SUCCESS; return retval; } static int _pam_unix_approve_pass(pam_handle_t * pamh ,unsigned int ctrl ,const char *pass_old ,const char *pass_new, int pass_min_len) { const void *user; const char *remark = NULL; int retval = PAM_SUCCESS; D(("&new=%p, &old=%p", pass_old, pass_new)); D(("new=[%s]", pass_new)); D(("old=[%s]", pass_old)); if (pass_new == NULL || (pass_old && !strcmp(pass_old, pass_new))) { if (on(UNIX_DEBUG, ctrl)) { pam_syslog(pamh, LOG_DEBUG, "bad authentication token"); } _make_remark(pamh, ctrl, PAM_ERROR_MSG, pass_new == NULL ? _("No password supplied") : _("Password unchanged")); return PAM_AUTHTOK_ERR; } /* * if one wanted to hardwire authentication token strength * checking this would be the place - AGM */ retval = pam_get_item(pamh, PAM_USER, &user); if (retval != PAM_SUCCESS) { if (on(UNIX_DEBUG, ctrl)) { pam_syslog(pamh, LOG_ERR, "Can not get username"); return PAM_AUTHTOK_ERR; } } if (off(UNIX__IAMROOT, ctrl)) { if (strlen(pass_new) < pass_min_len) remark = _("You must choose a longer password"); D(("length check [%s]", remark)); if (on(UNIX_REMEMBER_PASSWD, ctrl)) { if ((retval = check_old_password(user, pass_new)) == PAM_AUTHTOK_ERR) remark = _("Password has been already used. Choose another."); if (retval == PAM_ABORT) { pam_syslog(pamh, LOG_ERR, "can't open %s file to check old passwords", OLD_PASSWORDS_FILE); return retval; } } } if (remark) { _make_remark(pamh, ctrl, PAM_ERROR_MSG, remark); retval = PAM_AUTHTOK_ERR; } return retval; } int pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv) { unsigned int ctrl, lctrl; int retval; int remember = -1; int rounds = -1; int pass_min_len = 0; /* */ const char *user; const void *pass_old, *pass_new; /* */ D(("called.")); ctrl = _set_ctrl(pamh, flags, &remember, &rounds, &pass_min_len, argc, argv); /* * First get the name of a user */ retval = pam_get_user(pamh, &user, NULL); if (retval == PAM_SUCCESS) { /* * Various libraries at various times have had bugs related to * '+' or '-' as the first character of a user name. Don't * allow them. */ if (user == NULL || user[0] == '-' || user[0] == '+') { pam_syslog(pamh, LOG_ERR, "bad username [%s]", user); return PAM_USER_UNKNOWN; } if (retval == PAM_SUCCESS && on(UNIX_DEBUG, ctrl)) pam_syslog(pamh, LOG_DEBUG, "username [%s] obtained", user); } else { if (on(UNIX_DEBUG, ctrl)) pam_syslog(pamh, LOG_DEBUG, "password - could not identify user"); return retval; } D(("Got username of %s", user)); /* * Before we do anything else, check to make sure that the user's * info is in one of the databases we can modify from this module, * which currently is 'files' and 'nis'. We have to do this because * getpwnam() doesn't tell you *where* the information it gives you * came from, nor should it. That's our job. */ if (_unix_comesfromsource(pamh, user, 1, on(UNIX_NIS, ctrl)) == 0) { pam_syslog(pamh, LOG_DEBUG, "user \"%s\" does not exist in /etc/passwd%s", user, on(UNIX_NIS, ctrl) ? " or NIS" : ""); return PAM_USER_UNKNOWN; } else { struct passwd *pwd; _unix_getpwnam(pamh, user, 1, 1, &pwd); if (pwd == NULL) { pam_syslog(pamh, LOG_DEBUG, "user \"%s\" has corrupted passwd entry", user); return PAM_USER_UNKNOWN; } } /* * This is not an AUTH module! */ if (on(UNIX__NONULL, ctrl)) set(UNIX__NULLOK, ctrl); if (on(UNIX__PRELIM, ctrl)) { /* * obtain and verify the current password (OLDAUTHTOK) for * the user. */ char *Announce; D(("prelim check")); if (_unix_blankpasswd(pamh, ctrl, user)) { return PAM_SUCCESS; } else if (off(UNIX__IAMROOT, ctrl)) { /* instruct user what is happening */ if (asprintf(&Announce, _("Changing password for %s."), user) < 0) { pam_syslog(pamh, LOG_CRIT, "password - out of memory"); return PAM_BUF_ERR; } lctrl = ctrl; set(UNIX__OLD_PASSWD, lctrl); retval = _unix_read_password(pamh, lctrl ,Announce ,_("(current) UNIX password: ") ,NULL ,_UNIX_OLD_AUTHTOK ,&pass_old); free(Announce); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_NOTICE, "password - (old) token not obtained"); return retval; } /* verify that this is the password for this user */ retval = _unix_verify_password(pamh, user, pass_old, ctrl); } else { D(("process run by root so do nothing this time around")); pass_old = NULL; retval = PAM_SUCCESS; /* root doesn't have too */ } if (retval != PAM_SUCCESS) { D(("Authentication failed")); pass_old = NULL; return retval; } retval = pam_set_item(pamh, PAM_OLDAUTHTOK, (const void *) pass_old); pass_old = NULL; if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_CRIT, "failed to set PAM_OLDAUTHTOK"); } retval = _unix_verify_shadow(pamh,user, ctrl); if (retval == PAM_AUTHTOK_ERR) { if (off(UNIX__IAMROOT, ctrl)) _make_remark(pamh, ctrl, PAM_ERROR_MSG, _("You must wait longer to change your password")); else retval = PAM_SUCCESS; } } else if (on(UNIX__UPDATE, ctrl)) { /* * tpass is used below to store the _pam_md() return; it * should be _pam_delete()'d. */ char *tpass = NULL; int retry = 0; /* * obtain the proposed password */ D(("do update")); /* * get the old token back. NULL was ok only if root [at this * point we assume that this has already been enforced on a * previous call to this function]. */ if (off(UNIX_NOT_SET_PASS, ctrl)) { retval = pam_get_item(pamh, PAM_OLDAUTHTOK ,&pass_old); } else { retval = pam_get_data(pamh, _UNIX_OLD_AUTHTOK ,&pass_old); if (retval == PAM_NO_MODULE_DATA) { retval = PAM_SUCCESS; pass_old = NULL; } } D(("pass_old [%s]", pass_old)); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_NOTICE, "user not authenticated"); return retval; } D(("get new password now")); lctrl = ctrl; if (on(UNIX_USE_AUTHTOK, lctrl)) { set(UNIX_USE_FIRST_PASS, lctrl); } retry = 0; retval = PAM_AUTHTOK_ERR; while ((retval != PAM_SUCCESS) && (retry++ < MAX_PASSWD_TRIES)) { /* * use_authtok is to force the use of a previously entered * password -- needed for pluggable password strength checking */ retval = _unix_read_password(pamh, lctrl ,NULL ,_("Enter new UNIX password: ") ,_("Retype new UNIX password: ") ,_UNIX_NEW_AUTHTOK ,&pass_new); if (retval != PAM_SUCCESS) { if (on(UNIX_DEBUG, ctrl)) { pam_syslog(pamh, LOG_ALERT, "password - new password not obtained"); } pass_old = NULL; /* tidy up */ return retval; } D(("returned to _unix_chauthtok")); /* * At this point we know who the user is and what they * propose as their new password. Verify that the new * password is acceptable. */ if (*(const char *)pass_new == '\0') { /* "\0" password = NULL */ pass_new = NULL; } retval = _pam_unix_approve_pass(pamh, ctrl, pass_old, pass_new, pass_min_len); if (retval != PAM_SUCCESS && off(UNIX_NOT_SET_PASS, ctrl)) { pam_set_item(pamh, PAM_AUTHTOK, NULL); } } if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_NOTICE, "new password not acceptable"); pass_new = pass_old = NULL; /* tidy up */ return retval; } if (lock_pwdf() != PAM_SUCCESS) { return PAM_AUTHTOK_LOCK_BUSY; } if (pass_old) { retval = _unix_verify_password(pamh, user, pass_old, ctrl); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_NOTICE, "user password changed by another process"); unlock_pwdf(); return retval; } } retval = _unix_verify_shadow(pamh, user, ctrl); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_NOTICE, "user shadow entry expired"); unlock_pwdf(); return retval; } retval = _pam_unix_approve_pass(pamh, ctrl, pass_old, pass_new, pass_min_len); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_NOTICE, "new password not acceptable 2"); pass_new = pass_old = NULL; /* tidy up */ unlock_pwdf(); return retval; } /* * By reaching here we have approved the passwords and must now * rebuild the password database file. */ /* * First we encrypt the new password. */ tpass = create_password_hash(pamh, pass_new, ctrl, rounds); if (tpass == NULL) { pam_syslog(pamh, LOG_CRIT, "crypt() failure or out of memory for password"); pass_new = pass_old = NULL; /* tidy up */ unlock_pwdf(); return PAM_BUF_ERR; } D(("password processed")); /* update the password database(s) -- race conditions..? */ retval = _do_setpass(pamh, user, pass_old, tpass, ctrl, remember); /* _do_setpass has called unlock_pwdf for us */ _pam_delete(tpass); pass_old = pass_new = NULL; } else { /* something has broken with the module */ pam_syslog(pamh, LOG_ALERT, "password received unknown request"); retval = PAM_ABORT; } D(("retval was %d", retval)); return retval; } Linux-PAM-1.1.8/modules/pam_unix/Makefile.am0000644000000000000000000000403112160065211015436 00000000000000# # Copyright (c) 2005, 2006, 2009, 2011 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README md5.c md5_crypt.c lckpwdf.-c $(MANS) CHANGELOG \ tst-pam_unix $(XMLS) man_MANS = pam_unix.8 unix_chkpwd.8 unix_update.8 XMLS = README.xml pam_unix.8.xml unix_chkpwd.8.xml unix_update.8.xml TESTS = tst-pam_unix securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -DCHKPWD_HELPER=\"$(sbindir)/unix_chkpwd\" \ -DUPDATE_HELPER=\"$(sbindir)/unix_update\" \ $(NIS_CFLAGS) if HAVE_LIBSELINUX AM_CFLAGS += -D"WITH_SELINUX" endif pam_unix_la_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING pam_unix_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif pam_unix_la_LIBADD = $(top_builddir)/libpam/libpam.la \ @LIBCRYPT@ @LIBSELINUX@ $(NIS_LIBS) securelib_LTLIBRARIES = pam_unix.la noinst_HEADERS = md5.h support.h yppasswd.h bigcrypt.h passverify.h \ pam_unix_static.h sbin_PROGRAMS = unix_chkpwd unix_update noinst_PROGRAMS = bigcrypt pam_unix_la_SOURCES = bigcrypt.c pam_unix_acct.c \ pam_unix_auth.c pam_unix_passwd.c pam_unix_sess.c support.c \ passverify.c yppasswd_xdr.c md5_good.c md5_broken.c if STATIC_MODULES pam_unix_la_SOURCES += pam_unix_static.c endif bigcrypt_SOURCES = bigcrypt.c bigcrypt_main.c bigcrypt_CFLAGS = $(AM_CFLAGS) bigcrypt_LDADD = @LIBCRYPT@ unix_chkpwd_SOURCES = unix_chkpwd.c md5_good.c md5_broken.c bigcrypt.c \ passverify.c unix_chkpwd_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ -DHELPER_COMPILE=\"unix_chkpwd\" unix_chkpwd_LDFLAGS = @PIE_LDFLAGS@ unix_chkpwd_LDADD = @LIBCRYPT@ @LIBSELINUX@ @LIBAUDIT@ unix_update_SOURCES = unix_update.c md5_good.c md5_broken.c bigcrypt.c \ passverify.c unix_update_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ -DHELPER_COMPILE=\"unix_update\" unix_update_LDFLAGS = @PIE_LDFLAGS@ unix_update_LDADD = @LIBCRYPT@ @LIBSELINUX@ if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_unix.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_unix/yppasswd.h0000644000000000000000000000230112160065211015423 00000000000000/* * yppasswdd * Copyright 1994, 1995, 1996 Olaf Kirch, * * This program is covered by the GNU General Public License, version 2 * or later. It is provided in the hope that it is useful. However, the author * disclaims ALL WARRANTIES, expressed or implied. See the GPL for details. * * This file was generated automatically by rpcgen from yppasswd.x, and * editied manually. */ #ifndef _YPPASSWD_H_ #define _YPPASSWD_H_ #define YPPASSWDPROG ((u_long)100009) #define YPPASSWDVERS ((u_long)1) #define YPPASSWDPROC_UPDATE ((u_long)1) /* * The password struct passed by the update call. I renamed it to * xpasswd to avoid a type clash with the one defined in . */ #ifndef __sgi typedef struct xpasswd { char *pw_name; char *pw_passwd; int pw_uid; int pw_gid; char *pw_gecos; char *pw_dir; char *pw_shell; } xpasswd; #else #include typedef struct xpasswd xpasswd; #endif /* The updated password information, plus the old password. */ typedef struct yppasswd { char *oldpass; xpasswd newpw; } yppasswd; /* XDR encoding/decoding routines */ bool_t xdr_xpasswd(XDR * xdrs, xpasswd * objp); bool_t xdr_yppasswd(XDR * xdrs, yppasswd * objp); #endif /* _YPPASSWD_H_ */ Linux-PAM-1.1.8/modules/pam_unix/md5_crypt.c0000644000000000000000000001014612160065211015460 00000000000000/* * $Id$ * * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * * Origin: Id: crypt.c,v 1.3 1995/05/30 05:42:22 rgrimes Exp * */ #include #include #include "md5.h" static unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */ "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; static void to64(char *s, unsigned long v, int n) { while (--n >= 0) { *s++ = itoa64[v & 0x3f]; v >>= 6; } } /* * UNIX password * * Use MD5 for what it is best at... */ char *MD5Name(crypt_md5)(const char *pw, const char *salt) { const char *magic = "$1$"; /* This string is magic for this algorithm. Having * it this way, we can get get better later on */ char *passwd, *p; const char *sp, *ep; unsigned char final[16]; int sl, pl, i, j; MD5_CTX ctx, ctx1; unsigned long l; /* Refine the Salt first */ sp = salt; /* TODO: now that we're using malloc'ed memory, get rid of the strange constant buffer size. */ passwd = malloc(120); /* If it starts with the magic string, then skip that */ if (!strncmp(sp, magic, strlen(magic))) sp += strlen(magic); /* It stops at the first '$', max 8 chars */ for (ep = sp; *ep && *ep != '$' && ep < (sp + 8); ep++) continue; /* get the length of the true salt */ sl = ep - sp; MD5Name(MD5Init)(&ctx); /* The password first, since that is what is most unknown */ MD5Name(MD5Update)(&ctx,(unsigned const char *)pw,strlen(pw)); /* Then our magic string */ MD5Name(MD5Update)(&ctx,(unsigned const char *)magic,strlen(magic)); /* Then the raw salt */ MD5Name(MD5Update)(&ctx,(unsigned const char *)sp,sl); /* Then just as many characters of the MD5(pw,salt,pw) */ MD5Name(MD5Init)(&ctx1); MD5Name(MD5Update)(&ctx1,(unsigned const char *)pw,strlen(pw)); MD5Name(MD5Update)(&ctx1,(unsigned const char *)sp,sl); MD5Name(MD5Update)(&ctx1,(unsigned const char *)pw,strlen(pw)); MD5Name(MD5Final)(final,&ctx1); for (pl = strlen(pw); pl > 0; pl -= 16) MD5Name(MD5Update)(&ctx,(unsigned const char *)final,pl>16 ? 16 : pl); /* Don't leave anything around in vm they could use. */ memset(final, 0, sizeof final); /* Then something really weird... */ for (j = 0, i = strlen(pw); i; i >>= 1) if (i & 1) MD5Name(MD5Update)(&ctx, (unsigned const char *)final+j, 1); else MD5Name(MD5Update)(&ctx, (unsigned const char *)pw+j, 1); /* Now make the output string */ strcpy(passwd, magic); strncat(passwd, sp, sl); strcat(passwd, "$"); MD5Name(MD5Final)(final,&ctx); /* * and now, just to make sure things don't run too fast * On a 60 Mhz Pentium this takes 34 msec, so you would * need 30 seconds to build a 1000 entry dictionary... */ for (i = 0; i < 1000; i++) { MD5Name(MD5Init)(&ctx1); if (i & 1) MD5Name(MD5Update)(&ctx1,(unsigned const char *)pw,strlen(pw)); else MD5Name(MD5Update)(&ctx1,(unsigned const char *)final,16); if (i % 3) MD5Name(MD5Update)(&ctx1,(unsigned const char *)sp,sl); if (i % 7) MD5Name(MD5Update)(&ctx1,(unsigned const char *)pw,strlen(pw)); if (i & 1) MD5Name(MD5Update)(&ctx1,(unsigned const char *)final,16); else MD5Name(MD5Update)(&ctx1,(unsigned const char *)pw,strlen(pw)); MD5Name(MD5Final)(final,&ctx1); } p = passwd + strlen(passwd); l = (final[0] << 16) | (final[6] << 8) | final[12]; to64(p, l, 4); p += 4; l = (final[1] << 16) | (final[7] << 8) | final[13]; to64(p, l, 4); p += 4; l = (final[2] << 16) | (final[8] << 8) | final[14]; to64(p, l, 4); p += 4; l = (final[3] << 16) | (final[9] << 8) | final[15]; to64(p, l, 4); p += 4; l = (final[4] << 16) | (final[10] << 8) | final[5]; to64(p, l, 4); p += 4; l = final[11]; to64(p, l, 2); p += 2; *p = '\0'; /* Don't leave anything around in vm they could use. */ memset(final, 0, sizeof final); return passwd; } Linux-PAM-1.1.8/modules/pam_unix/pam_unix.8.xml0000644000000000000000000003231012160066605016123 00000000000000 pam_unix 8 Linux-PAM Manual pam_unix Module for traditional password authentication pam_unix.so ... DESCRIPTION This is the standard Unix authentication module. It uses standard calls from the system's libraries to retrieve and set account information as well as authentication. Usually this is obtained from the /etc/passwd and the /etc/shadow file as well if shadow is enabled. The account component performs the task of establishing the status of the user's account and password based on the following shadow elements: expire, last_change, max_change, min_change, warn_change. In the case of the latter, it may offer advice to the user on changing their password or, through the PAM_AUTHTOKEN_REQD return, delay giving service to the user until they have established a new password. The entries listed above are documented in the shadow5 manual page. Should the user's record not contain one or more of these entries, the corresponding shadow check is not performed. The authentication component performs the task of checking the users credentials (password). The default action of this module is to not permit the user access to a service if their official password is blank. A helper binary, unix_chkpwd8 , is provided to check the user's password when it is stored in a read protected database. This binary is very simple and will only check the password of the user invoking it. It is called transparently on behalf of the user by the authenticating component of this module. In this way it is possible for applications like xlock1 to work without being setuid-root. The module, by default, will temporarily turn off SIGCHLD handling for the duration of execution of the helper binary. This is generally the right thing to do, as many applications are not prepared to handle this signal from a child they didn't know was fork()d. The module argument can be used to suppress this temporary shielding and may be needed for use with certain applications. The password component of this module performs the task of updating the user's password. The default encryption hash is taken from the ENCRYPT_METHOD variable from /etc/login.defs The session component of this module logs when a user logins or leave the system. Remaining arguments, supported by others functions of this module, are silently ignored. Other arguments are logged as errors through syslog3 . OPTIONS Turns on debugging via syslog3 . A little more extreme than debug. The default action of this module is to not permit the user access to a service if their official password is blank. The argument overrides this default. Before prompting the user for their password, the module first tries the previous stacked module's password in case that satisfies this module as well. The argument forces the module to use a previous stacked modules password and will never prompt the user - if no password is available or the password is not appropriate, the user will be denied access. This argument can be used to discourage the authentication component from requesting a delay should the authentication as a whole fail. The default action is for the module to request a delay-on-failure of the order of two second. When password changing enforce the module to set the new password to the one provided by a previously stacked module (this is used in the example of the stacking of the pam_cracklib module documented below). This argument is used to inform the module that it is not to pay attention to/make available the old or new passwords from/to other (stacked) password modules. NIS RPC is used for setting new passwords. The last n passwords for each user are saved in /etc/security/opasswd in order to force password change history and keep the user from alternating between the same password too frequently. Instead of this option the pam_pwhistory module should be used. Try to maintain a shadow based system. When a user changes their password next, encrypt it with the MD5 algorithm. When a user changes their password next, encrypt it with the DEC C2 algorithm. When a user changes their password next, encrypt it with the SHA256 algorithm. If the SHA256 algorithm is not known to the crypt3 function, fall back to MD5. When a user changes their password next, encrypt it with the SHA512 algorithm. If the SHA512 algorithm is not known to the crypt3 function, fall back to MD5. When a user changes their password next, encrypt it with the blowfish algorithm. If the blowfish algorithm is not known to the crypt3 function, fall back to MD5. Set the optional number of rounds of the SHA256, SHA512 and blowfish password hashing algorithms to n. Ignore errors reading shadow information for users in the account management module. Set a minimum password length of n characters. The max. for DES crypt based passwords are 8 characters. Invalid arguments are logged with syslog3 . MODULE TYPES PROVIDED All module types (, , and ) are provided. RETURN VALUES PAM_IGNORE Ignore this module. EXAMPLES An example usage for /etc/pam.d/login would be: # Authenticate the user auth required pam_unix.so # Ensure users account and password are still active account required pam_unix.so # Change the users password, but at first check the strength # with pam_cracklib(8) password required pam_cracklib.so retry=3 minlen=6 difok=3 password required pam_unix.so use_authtok nullok md5 session required pam_unix.so SEE ALSO login.defs5 , pam.conf5 , pam.d5 , pam8 AUTHOR pam_unix was written by various people. Linux-PAM-1.1.8/modules/pam_unix/README0000644000000000000000000001356212216527614014307 00000000000000pam_unix — Module for traditional password authentication ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION This is the standard Unix authentication module. It uses standard calls from the system's libraries to retrieve and set account information as well as authentication. Usually this is obtained from the /etc/passwd and the /etc/ shadow file as well if shadow is enabled. The account component performs the task of establishing the status of the user's account and password based on the following shadow elements: expire, last_change, max_change, min_change, warn_change. In the case of the latter, it may offer advice to the user on changing their password or, through the PAM_AUTHTOKEN_REQD return, delay giving service to the user until they have established a new password. The entries listed above are documented in the shadow(5) manual page. Should the user's record not contain one or more of these entries, the corresponding shadow check is not performed. The authentication component performs the task of checking the users credentials (password). The default action of this module is to not permit the user access to a service if their official password is blank. A helper binary, unix_chkpwd(8), is provided to check the user's password when it is stored in a read protected database. This binary is very simple and will only check the password of the user invoking it. It is called transparently on behalf of the user by the authenticating component of this module. In this way it is possible for applications like xlock(1) to work without being setuid-root. The module, by default, will temporarily turn off SIGCHLD handling for the duration of execution of the helper binary. This is generally the right thing to do, as many applications are not prepared to handle this signal from a child they didn't know was fork()d. The noreap module argument can be used to suppress this temporary shielding and may be needed for use with certain applications. The password component of this module performs the task of updating the user's password. The default encryption hash is taken from the ENCRYPT_METHOD variable from /etc/login.defs The session component of this module logs when a user logins or leave the system. Remaining arguments, supported by others functions of this module, are silently ignored. Other arguments are logged as errors through syslog(3). OPTIONS debug Turns on debugging via syslog(3). audit A little more extreme than debug. nullok The default action of this module is to not permit the user access to a service if their official password is blank. The nullok argument overrides this default. try_first_pass Before prompting the user for their password, the module first tries the previous stacked module's password in case that satisfies this module as well. use_first_pass The argument use_first_pass forces the module to use a previous stacked modules password and will never prompt the user - if no password is available or the password is not appropriate, the user will be denied access. nodelay This argument can be used to discourage the authentication component from requesting a delay should the authentication as a whole fail. The default action is for the module to request a delay-on-failure of the order of two second. use_authtok When password changing enforce the module to set the new password to the one provided by a previously stacked password module (this is used in the example of the stacking of the pam_cracklib module documented below). not_set_pass This argument is used to inform the module that it is not to pay attention to/make available the old or new passwords from/to other (stacked) password modules. nis NIS RPC is used for setting new passwords. remember=n The last n passwords for each user are saved in /etc/security/opasswd in order to force password change history and keep the user from alternating between the same password too frequently. Instead of this option the pam_pwhistory module should be used. shadow Try to maintain a shadow based system. md5 When a user changes their password next, encrypt it with the MD5 algorithm. bigcrypt When a user changes their password next, encrypt it with the DEC C2 algorithm. sha256 When a user changes their password next, encrypt it with the SHA256 algorithm. If the SHA256 algorithm is not known to the crypt(3) function, fall back to MD5. sha512 When a user changes their password next, encrypt it with the SHA512 algorithm. If the SHA512 algorithm is not known to the crypt(3) function, fall back to MD5. blowfish When a user changes their password next, encrypt it with the blowfish algorithm. If the blowfish algorithm is not known to the crypt(3) function, fall back to MD5. rounds=n Set the optional number of rounds of the SHA256, SHA512 and blowfish password hashing algorithms to n. broken_shadow Ignore errors reading shadow information for users in the account management module. minlen=n Set a minimum password length of n characters. The max. for DES crypt based passwords are 8 characters. Invalid arguments are logged with syslog(3). EXAMPLES An example usage for /etc/pam.d/login would be: # Authenticate the user auth required pam_unix.so # Ensure users account and password are still active account required pam_unix.so # Change the users password, but at first check the strength # with pam_cracklib(8) password required pam_cracklib.so retry=3 minlen=6 difok=3 password required pam_unix.so use_authtok nullok md5 session required pam_unix.so AUTHOR pam_unix was written by various people. Linux-PAM-1.1.8/modules/pam_unix/tst-pam_unix0000755000000000000000000000006312160065211015761 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_unix.so Linux-PAM-1.1.8/modules/pam_unix/support.h0000644000000000000000000001606412160066605015310 00000000000000/* * $Id$ */ #ifndef _PAM_UNIX_SUPPORT_H #define _PAM_UNIX_SUPPORT_H #include /* * File to read value of ENCRYPT_METHOD from. */ #define LOGIN_DEFS "/etc/login.defs" /* * here is the string to inform the user that the new passwords they * typed were not the same. */ #define MISTYPED_PASS "Sorry, passwords do not match" /* type definition for the control options */ typedef struct { const char *token; unsigned int mask; /* shall assume 32 bits of flags */ unsigned int flag; unsigned int is_hash_algo; } UNIX_Ctrls; /* * macro to determine if a given flag is on */ #define on(x,ctrl) (unix_args[x].flag & ctrl) /* * macro to determine that a given flag is NOT on */ #define off(x,ctrl) (!on(x,ctrl)) /* * macro to turn on/off a ctrl flag manually */ #define set(x,ctrl) (ctrl = ((ctrl)&unix_args[x].mask)|unix_args[x].flag) #define unset(x,ctrl) (ctrl &= ~(unix_args[x].flag)) /* the generic mask */ #define _ALL_ON_ (~0U) /* end of macro definitions definitions for the control flags */ /* ****************************************************************** * * ctrl flags proper.. */ /* * here are the various options recognized by the unix module. They * are enumerated here and then defined below. Internal arguments are * given NULL tokens. */ #define UNIX__OLD_PASSWD 0 /* internal */ #define UNIX__VERIFY_PASSWD 1 /* internal */ #define UNIX__IAMROOT 2 /* internal */ #define UNIX_AUDIT 3 /* print more things than debug.. some information may be sensitive */ #define UNIX_USE_FIRST_PASS 4 #define UNIX_TRY_FIRST_PASS 5 #define UNIX_NOT_SET_PASS 6 /* don't set the AUTHTOK items */ #define UNIX__PRELIM 7 /* internal */ #define UNIX__UPDATE 8 /* internal */ #define UNIX__NONULL 9 /* internal */ #define UNIX__QUIET 10 /* internal */ #define UNIX_USE_AUTHTOK 11 /* insist on reading PAM_AUTHTOK */ #define UNIX_SHADOW 12 /* signal shadow on */ #define UNIX_MD5_PASS 13 /* force the use of MD5 passwords */ #define UNIX__NULLOK 14 /* Null token ok */ #define UNIX_DEBUG 15 /* send more info to syslog(3) */ #define UNIX_NODELAY 16 /* admin does not want a fail-delay */ #define UNIX_NIS 17 /* wish to use NIS for pwd */ #define UNIX_BIGCRYPT 18 /* use DEC-C2 crypt()^x function */ #define UNIX_LIKE_AUTH 19 /* need to auth for setcred to work */ #define UNIX_REMEMBER_PASSWD 20 /* Remember N previous passwords */ #define UNIX_NOREAP 21 /* don't reap child process */ #define UNIX_BROKEN_SHADOW 22 /* ignore errors reading password aging * information during acct management */ #define UNIX_SHA256_PASS 23 /* new password hashes will use SHA256 */ #define UNIX_SHA512_PASS 24 /* new password hashes will use SHA512 */ #define UNIX_ALGO_ROUNDS 25 /* optional number of rounds for new password hash algorithms */ #define UNIX_BLOWFISH_PASS 26 /* new password hashes will use blowfish */ #define UNIX_MIN_PASS_LEN 27 /* min length for password */ /* -------------- */ #define UNIX_CTRLS_ 28 /* number of ctrl arguments defined */ #define UNIX_DES_CRYPT(ctrl) (off(UNIX_MD5_PASS,ctrl)&&off(UNIX_BIGCRYPT,ctrl)&&off(UNIX_SHA256_PASS,ctrl)&&off(UNIX_SHA512_PASS,ctrl)&&off(UNIX_BLOWFISH_PASS,ctrl)) static const UNIX_Ctrls unix_args[UNIX_CTRLS_] = { /* symbol token name ctrl mask ctrl * * ----------------------- ------------------- --------------------- -------- */ /* UNIX__OLD_PASSWD */ {NULL, _ALL_ON_, 01, 0}, /* UNIX__VERIFY_PASSWD */ {NULL, _ALL_ON_, 02, 0}, /* UNIX__IAMROOT */ {NULL, _ALL_ON_, 04, 0}, /* UNIX_AUDIT */ {"audit", _ALL_ON_, 010, 0}, /* UNIX_USE_FIRST_PASS */ {"use_first_pass", _ALL_ON_^(060), 020, 0}, /* UNIX_TRY_FIRST_PASS */ {"try_first_pass", _ALL_ON_^(060), 040, 0}, /* UNIX_NOT_SET_PASS */ {"not_set_pass", _ALL_ON_, 0100, 0}, /* UNIX__PRELIM */ {NULL, _ALL_ON_^(0600), 0200, 0}, /* UNIX__UPDATE */ {NULL, _ALL_ON_^(0600), 0400, 0}, /* UNIX__NONULL */ {NULL, _ALL_ON_, 01000, 0}, /* UNIX__QUIET */ {NULL, _ALL_ON_, 02000, 0}, /* UNIX_USE_AUTHTOK */ {"use_authtok", _ALL_ON_, 04000, 0}, /* UNIX_SHADOW */ {"shadow", _ALL_ON_, 010000, 0}, /* UNIX_MD5_PASS */ {"md5", _ALL_ON_^(0260420000), 020000, 1}, /* UNIX__NULLOK */ {"nullok", _ALL_ON_^(01000), 0, 0}, /* UNIX_DEBUG */ {"debug", _ALL_ON_, 040000, 0}, /* UNIX_NODELAY */ {"nodelay", _ALL_ON_, 0100000, 0}, /* UNIX_NIS */ {"nis", _ALL_ON_, 0200000, 0}, /* UNIX_BIGCRYPT */ {"bigcrypt", _ALL_ON_^(0260420000), 0400000, 1}, /* UNIX_LIKE_AUTH */ {"likeauth", _ALL_ON_, 01000000, 0}, /* UNIX_REMEMBER_PASSWD */ {"remember=", _ALL_ON_, 02000000, 0}, /* UNIX_NOREAP */ {"noreap", _ALL_ON_, 04000000, 0}, /* UNIX_BROKEN_SHADOW */ {"broken_shadow", _ALL_ON_, 010000000, 0}, /* UNIX_SHA256_PASS */ {"sha256", _ALL_ON_^(0260420000), 020000000, 1}, /* UNIX_SHA512_PASS */ {"sha512", _ALL_ON_^(0260420000), 040000000, 1}, /* UNIX_ALGO_ROUNDS */ {"rounds=", _ALL_ON_, 0100000000, 0}, /* UNIX_BLOWFISH_PASS */ {"blowfish", _ALL_ON_^(0260420000), 0200000000, 1}, /* UNIX_MIN_PASS_LEN */ {"minlen=", _ALL_ON_, 0400000000, 0}, }; #define UNIX_DEFAULTS (unix_args[UNIX__NONULL].flag) #define MAX_FD_NO 2000000 /* use this to free strings. ESPECIALLY password strings */ #define _pam_delete(xx) \ { \ _pam_overwrite(xx); \ _pam_drop(xx); \ } extern int _make_remark(pam_handle_t * pamh, unsigned int ctrl ,int type, const char *text); extern int _set_ctrl(pam_handle_t * pamh, int flags, int *remember, int *rounds, int *pass_min_len, int argc, const char **argv); extern int _unix_getpwnam (pam_handle_t *pamh, const char *name, int files, int nis, struct passwd **ret); extern int _unix_comesfromsource (pam_handle_t *pamh, const char *name, int files, int nis); extern int _unix_blankpasswd(pam_handle_t *pamh,unsigned int ctrl, const char *name); extern int _unix_verify_password(pam_handle_t * pamh, const char *name ,const char *p, unsigned int ctrl); extern int _unix_read_password(pam_handle_t * pamh ,unsigned int ctrl ,const char *comment ,const char *prompt1 ,const char *prompt2 ,const char *data_name ,const void **pass); extern int _unix_run_verify_binary(pam_handle_t *pamh, unsigned int ctrl, const char *user, int *daysleft); #endif /* _PAM_UNIX_SUPPORT_H */ Linux-PAM-1.1.8/modules/pam_unix/unix_chkpwd.80000644000000000000000000000401712216527615016037 00000000000000'\" t .\" Title: unix_chkpwd .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "UNIX_CHKPWD" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" unix_chkpwd \- Helper binary that verifies the password of the current user .SH "SYNOPSIS" .HP \w'\fBunix_chkpwd\fR\ 'u \fBunix_chkpwd\fR [\&.\&.\&.] .SH "DESCRIPTION" .PP \fIunix_chkpwd\fR is a helper program for the \fIpam_unix\fR module that verifies the password of the current user\&. It also checks password and account expiration dates in \fIshadow\fR\&. It is not intended to be run directly from the command line and logs a security violation if done so\&. .PP It is typically installed setuid root or setgid shadow\&. .PP The interface of the helper \- command line options, and input/output data format are internal to the \fIpam_unix\fR module and it should not be called directly from applications\&. .SH "SEE ALSO" .PP \fBpam_unix\fR(8) .SH "AUTHOR" .PP Written by Andrew Morgan and other various people\&. Linux-PAM-1.1.8/modules/pam_unix/md5.h0000644000000000000000000000154512160065211014247 00000000000000 #ifndef MD5_H #define MD5_H typedef unsigned int uint32; struct MD5Context { uint32 buf[4]; uint32 bits[2]; unsigned char in[64]; }; void GoodMD5Init(struct MD5Context *); void GoodMD5Update(struct MD5Context *, unsigned const char *, unsigned); void GoodMD5Final(unsigned char digest[16], struct MD5Context *); void GoodMD5Transform(uint32 buf[4], uint32 const in[16]); void BrokenMD5Init(struct MD5Context *); void BrokenMD5Update(struct MD5Context *, unsigned const char *, unsigned); void BrokenMD5Final(unsigned char digest[16], struct MD5Context *); void BrokenMD5Transform(uint32 buf[4], uint32 const in[16]); char *Goodcrypt_md5(const char *pw, const char *salt); char *Brokencrypt_md5(const char *pw, const char *salt); /* * This is needed to make RSAREF happy on some MS-DOS compilers. */ typedef struct MD5Context MD5_CTX; #endif /* MD5_H */ Linux-PAM-1.1.8/modules/pam_unix/unix_update.c0000644000000000000000000001327212160065211016102 00000000000000/* * This program is designed to run with sufficient privilege * to read and write all of the unix password databases. * Its purpose is to allow updating the databases when * SELinux confinement of the caller domain prevents them to * do that themselves. * * The password is read from the standard input. The exit status of * this program indicates whether the password was updated or not. * * Copyright information is located at the end of the file. * */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "passverify.h" static int set_password(const char *forwho, const char *shadow, const char *remember) { struct passwd *pwd = NULL; int retval; char pass[MAXPASS + 1]; char towhat[MAXPASS + 1]; int npass = 0; /* we don't care about number format errors because the helper should be called internally only */ int doshadow = atoi(shadow); int nremember = atoi(remember); char *passwords[] = { pass, towhat }; /* read the password from stdin (a pipe from the pam_unix module) */ npass = read_passwords(STDIN_FILENO, 2, passwords); if (npass != 2) { /* is it a valid password? */ if (npass == 1) { helper_log_err(LOG_DEBUG, "no new password supplied"); memset(pass, '\0', MAXPASS); } else { helper_log_err(LOG_DEBUG, "no valid passwords supplied"); } return PAM_AUTHTOK_ERR; } if (lock_pwdf() != PAM_SUCCESS) return PAM_AUTHTOK_LOCK_BUSY; pwd = getpwnam(forwho); if (pwd == NULL) { retval = PAM_USER_UNKNOWN; goto done; } /* If real caller uid is not root we must verify that received old pass agrees with the current one. We always allow change from null pass. */ if (getuid()) { retval = helper_verify_password(forwho, pass, 1); if (retval != PAM_SUCCESS) { goto done; } } /* first, save old password */ if (save_old_password(forwho, pass, nremember)) { retval = PAM_AUTHTOK_ERR; goto done; } if (doshadow || is_pwd_shadowed(pwd)) { retval = unix_update_shadow(forwho, towhat); if (retval == PAM_SUCCESS) if (!is_pwd_shadowed(pwd)) retval = unix_update_passwd(forwho, "x"); } else { retval = unix_update_passwd(forwho, towhat); } done: memset(pass, '\0', MAXPASS); memset(towhat, '\0', MAXPASS); unlock_pwdf(); if (retval == PAM_SUCCESS) { return PAM_SUCCESS; } else { return PAM_AUTHTOK_ERR; } } int main(int argc, char *argv[]) { char *option; /* * Catch or ignore as many signal as possible. */ setup_signals(); /* * we establish that this program is running with non-tty stdin. * this is to discourage casual use. It does *NOT* prevent an * intruder from repeatadly running this program to determine the * password of the current user (brute force attack, but one for * which the attacker must already have gained access to the user's * account). */ if (isatty(STDIN_FILENO) || argc != 5 ) { helper_log_err(LOG_NOTICE ,"inappropriate use of Unix helper binary [UID=%d]" ,getuid()); fprintf(stderr ,"This binary is not designed for running in this way\n" "-- the system administrator has been informed\n"); sleep(10); /* this should discourage/annoy the user */ return PAM_SYSTEM_ERR; } /* We must be root to read/update shadow. */ if (geteuid() != 0) { return PAM_CRED_INSUFFICIENT; } option = argv[2]; if (strcmp(option, "update") == 0) { /* Attempting to change the password */ return set_password(argv[1], argv[3], argv[4]); } return PAM_SYSTEM_ERR; } /* * Copyright (c) Andrew G. Morgan, 1996. All rights reserved * Copyright (c) Red Hat, Inc., 2007, 2008. 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, 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. */ Linux-PAM-1.1.8/modules/pam_unix/CHANGELOG0000644000000000000000000000375512160065211014630 00000000000000$Id$ * Mon Aug 16 1999 Jan Rkorajski - fixed reentrancy problems * Sun Jul 4 21:03:42 PDT 1999 - temporarily removed the crypt16 stuff. I'm really paranoid about crypto stuff and exporting it, and there are a few too many 's-box' references in the code for my liking.. * Wed Jun 30 1999 Steve Langasek - further NIS+ fixes * Sun Jun 27 1999 Steve Langasek - fix to uid-handling code for NIS+ * Sat Jun 26 1999 Jan Rkorajski - merged MD5 fix and early failure syslog by Andrey Vladimirovich Savochkin - minor fixes - added signal handler to unix_chkpwd * Fri Jun 25 1999 Stephen Langasek - reorganized the code to let it build as separate C files * Sun Jun 20 1999 Jan Rkorajski - fixes in pam_unix_auth, it incorrectly saved and restored return value when likeauth option was used * Tue Jun 15 1999 Jan Rkorajski - added NIS+ support * Mon Jun 14 1999 Jan Rkorajski - total rewrite based on pam_pwdb module, now there is ONE pam_unix.so module, it accepts the same options as pam_pwdb - all of them correctly ;) (pam_pwdb dosn't understand what DISALLOW_NULL_AUTHTOK means) * Tue Apr 20 1999 Jan Rkorajski - Arghhh, pam_unix_passwd was not updating /etc/shadow when used with pam_cracklib. * Mon Apr 19 1999 Jan Rkorajski - added "remember=XXX" option that means 'remember XXX old passwords' Old passwords are stored in /etc/security/opasswd, there can be maximum of 400 passwords per user. * Sat Mar 27 1999 Jan Rkorajski - added crypt16 to pam_unix_auth and pam_unix_passwd (check only, this algorithm is too lame to use it in real life) * Sun Mar 21 1999 Jan Rkorajski - pam_unix_auth now correctly behave when user has NULL AUTHTOK - pam_unix_auth returns PAM_PERM_DENIED when seteuid fails Linux-PAM-1.1.8/modules/pam_unix/lckpwdf.-c0000644000000000000000000000575212160065211015270 00000000000000/* * This is a hack, but until libc and glibc both include this function * by default (libc only includes it if nys is not being used, at the * moment, and glibc doesn't appear to have it at all) we need to have * it here, too. :-( * * This should not become an official part of PAM. * * BEGIN_HACK */ /* * lckpwdf.c -- prevent simultaneous updates of password files * * Before modifying any of the password files, call lckpwdf(). It may block * for up to 15 seconds trying to get the lock. Return value is 0 on success * or -1 on failure. When you are done, call ulckpwdf() to release the lock. * The lock is also released automatically when the process exits. Only one * process at a time may hold the lock. * * These functions are supposed to be conformant with AT&T SVID Issue 3. * * Written by Marek Michalkiewicz , * public domain. */ #include #include #ifdef WITH_SELINUX #include #endif #define LOCKFILE "/etc/.pwd.lock" #define TIMEOUT 15 static int lockfd = -1; static int set_close_on_exec(int fd) { int flags = fcntl(fd, F_GETFD, 0); if (flags == -1) return -1; flags |= FD_CLOEXEC; return fcntl(fd, F_SETFD, flags); } static int do_lock(int fd) { struct flock fl; memset(&fl, 0, sizeof fl); fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; return fcntl(fd, F_SETLKW, &fl); } static void alarm_catch(int sig) { /* does nothing, but fcntl F_SETLKW will fail with EINTR */ } static int lckpwdf(void) { struct sigaction act, oldact; sigset_t set, oldset; if (lockfd != -1) return -1; #ifdef WITH_SELINUX if(is_selinux_enabled()>0) { lockfd = open(LOCKFILE, O_WRONLY); if(lockfd == -1 && errno == ENOENT) { security_context_t create_context; int rc; if(getfilecon("/etc/passwd", &create_context)) return -1; rc = setfscreatecon(create_context); freecon(create_context); if(rc) return -1; lockfd = open(LOCKFILE, O_CREAT | O_WRONLY, 0600); if(setfscreatecon(NULL)) return -1; } } else #endif lockfd = open(LOCKFILE, O_CREAT | O_WRONLY, 0600); if (lockfd == -1) return -1; if (set_close_on_exec(lockfd) == -1) goto cleanup_fd; memset(&act, 0, sizeof act); act.sa_handler = alarm_catch; act.sa_flags = 0; sigfillset(&act.sa_mask); if (sigaction(SIGALRM, &act, &oldact) == -1) goto cleanup_fd; sigemptyset(&set); sigaddset(&set, SIGALRM); if (sigprocmask(SIG_UNBLOCK, &set, &oldset) == -1) goto cleanup_sig; alarm(TIMEOUT); if (do_lock(lockfd) == -1) goto cleanup_alarm; alarm(0); sigprocmask(SIG_SETMASK, &oldset, NULL); sigaction(SIGALRM, &oldact, NULL); return 0; cleanup_alarm: alarm(0); sigprocmask(SIG_SETMASK, &oldset, NULL); cleanup_sig: sigaction(SIGALRM, &oldact, NULL); cleanup_fd: close(lockfd); lockfd = -1; return -1; } static int ulckpwdf(void) { unlink(LOCKFILE); if (lockfd == -1) return -1; if (close(lockfd) == -1) { lockfd = -1; return -1; } lockfd = -1; return 0; } /* END_HACK */ Linux-PAM-1.1.8/modules/pam_unix/unix_update.8.xml0000644000000000000000000000362312207335224016633 00000000000000 unix_update 8 Linux-PAM Manual unix_update Helper binary that updates the password of a given user unix_update ... DESCRIPTION unix_update is a helper program for the pam_unix module that updates the password of a given user. It is not intended to be run directly from the command line and logs a security violation if done so. The purpose of the helper is to enable tighter confinement of login and password changing services. The helper is thus called only when SELinux is enabled on the system. The interface of the helper - command line options, and input/output data format are internal to the pam_unix module and it should not be called directly from applications. SEE ALSO pam_unix8 AUTHOR Written by Tomas Mraz and other various people. Linux-PAM-1.1.8/modules/pam_unix/Makefile.in0000644000000000000000000015254012216527540015472 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009, 2011 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_LIBSELINUX_TRUE@am__append_1 = -D"WITH_SELINUX" @HAVE_VERSIONING_TRUE@am__append_2 = -Wl,--version-script=$(srcdir)/../modules.map sbin_PROGRAMS = unix_chkpwd$(EXEEXT) unix_update$(EXEEXT) noinst_PROGRAMS = bigcrypt$(EXEEXT) @STATIC_MODULES_TRUE@am__append_3 = pam_unix_static.c subdir = modules/pam_unix DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(sbindir)" \ "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) am__DEPENDENCIES_1 = pam_unix_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(am__DEPENDENCIES_1) am__pam_unix_la_SOURCES_DIST = bigcrypt.c pam_unix_acct.c \ pam_unix_auth.c pam_unix_passwd.c pam_unix_sess.c support.c \ passverify.c yppasswd_xdr.c md5_good.c md5_broken.c \ pam_unix_static.c @STATIC_MODULES_TRUE@am__objects_1 = pam_unix_static.lo am_pam_unix_la_OBJECTS = bigcrypt.lo pam_unix_acct.lo pam_unix_auth.lo \ pam_unix_passwd.lo pam_unix_sess.lo support.lo passverify.lo \ yppasswd_xdr.lo md5_good.lo md5_broken.lo $(am__objects_1) pam_unix_la_OBJECTS = $(am_pam_unix_la_OBJECTS) pam_unix_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(pam_unix_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS) am_bigcrypt_OBJECTS = bigcrypt-bigcrypt.$(OBJEXT) \ bigcrypt-bigcrypt_main.$(OBJEXT) bigcrypt_OBJECTS = $(am_bigcrypt_OBJECTS) bigcrypt_DEPENDENCIES = bigcrypt_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(bigcrypt_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_unix_chkpwd_OBJECTS = unix_chkpwd-unix_chkpwd.$(OBJEXT) \ unix_chkpwd-md5_good.$(OBJEXT) \ unix_chkpwd-md5_broken.$(OBJEXT) \ unix_chkpwd-bigcrypt.$(OBJEXT) \ unix_chkpwd-passverify.$(OBJEXT) unix_chkpwd_OBJECTS = $(am_unix_chkpwd_OBJECTS) unix_chkpwd_DEPENDENCIES = unix_chkpwd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(unix_chkpwd_CFLAGS) \ $(CFLAGS) $(unix_chkpwd_LDFLAGS) $(LDFLAGS) -o $@ am_unix_update_OBJECTS = unix_update-unix_update.$(OBJEXT) \ unix_update-md5_good.$(OBJEXT) \ unix_update-md5_broken.$(OBJEXT) \ unix_update-bigcrypt.$(OBJEXT) \ unix_update-passverify.$(OBJEXT) unix_update_OBJECTS = $(am_unix_update_OBJECTS) unix_update_DEPENDENCIES = unix_update_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(unix_update_CFLAGS) \ $(CFLAGS) $(unix_update_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_unix_la_SOURCES) $(bigcrypt_SOURCES) \ $(unix_chkpwd_SOURCES) $(unix_update_SOURCES) DIST_SOURCES = $(am__pam_unix_la_SOURCES_DIST) $(bigcrypt_SOURCES) \ $(unix_chkpwd_SOURCES) $(unix_update_SOURCES) man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README md5.c md5_crypt.c lckpwdf.-c $(MANS) CHANGELOG \ tst-pam_unix $(XMLS) man_MANS = pam_unix.8 unix_chkpwd.8 unix_update.8 XMLS = README.xml pam_unix.8.xml unix_chkpwd.8.xml unix_update.8.xml TESTS = tst-pam_unix securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include \ -I$(top_srcdir)/libpamc/include \ -DCHKPWD_HELPER=\"$(sbindir)/unix_chkpwd\" \ -DUPDATE_HELPER=\"$(sbindir)/unix_update\" $(NIS_CFLAGS) \ $(am__append_1) pam_unix_la_LDFLAGS = -no-undefined -avoid-version -module \ $(am__append_2) pam_unix_la_LIBADD = $(top_builddir)/libpam/libpam.la \ @LIBCRYPT@ @LIBSELINUX@ $(NIS_LIBS) securelib_LTLIBRARIES = pam_unix.la noinst_HEADERS = md5.h support.h yppasswd.h bigcrypt.h passverify.h \ pam_unix_static.h pam_unix_la_SOURCES = bigcrypt.c pam_unix_acct.c pam_unix_auth.c \ pam_unix_passwd.c pam_unix_sess.c support.c passverify.c \ yppasswd_xdr.c md5_good.c md5_broken.c $(am__append_3) bigcrypt_SOURCES = bigcrypt.c bigcrypt_main.c bigcrypt_CFLAGS = $(AM_CFLAGS) bigcrypt_LDADD = @LIBCRYPT@ unix_chkpwd_SOURCES = unix_chkpwd.c md5_good.c md5_broken.c bigcrypt.c \ passverify.c unix_chkpwd_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ -DHELPER_COMPILE=\"unix_chkpwd\" unix_chkpwd_LDFLAGS = @PIE_LDFLAGS@ unix_chkpwd_LDADD = @LIBCRYPT@ @LIBSELINUX@ @LIBAUDIT@ unix_update_SOURCES = unix_update.c md5_good.c md5_broken.c bigcrypt.c \ passverify.c unix_update_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ -DHELPER_COMPILE=\"unix_update\" unix_update_LDFLAGS = @PIE_LDFLAGS@ unix_update_LDADD = @LIBCRYPT@ @LIBSELINUX@ @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_unix/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_unix/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_unix.la: $(pam_unix_la_OBJECTS) $(pam_unix_la_DEPENDENCIES) $(pam_unix_la_LINK) -rpath $(securelibdir) $(pam_unix_la_OBJECTS) $(pam_unix_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(sbindir)" && rm -f $$files clean-sbinPROGRAMS: @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list bigcrypt$(EXEEXT): $(bigcrypt_OBJECTS) $(bigcrypt_DEPENDENCIES) @rm -f bigcrypt$(EXEEXT) $(bigcrypt_LINK) $(bigcrypt_OBJECTS) $(bigcrypt_LDADD) $(LIBS) unix_chkpwd$(EXEEXT): $(unix_chkpwd_OBJECTS) $(unix_chkpwd_DEPENDENCIES) @rm -f unix_chkpwd$(EXEEXT) $(unix_chkpwd_LINK) $(unix_chkpwd_OBJECTS) $(unix_chkpwd_LDADD) $(LIBS) unix_update$(EXEEXT): $(unix_update_OBJECTS) $(unix_update_DEPENDENCIES) @rm -f unix_update$(EXEEXT) $(unix_update_LINK) $(unix_update_OBJECTS) $(unix_update_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bigcrypt-bigcrypt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bigcrypt-bigcrypt_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bigcrypt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5_broken.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5_good.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_unix_acct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_unix_auth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_unix_passwd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_unix_sess.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_unix_static.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passverify.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/support.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_chkpwd-bigcrypt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_chkpwd-md5_broken.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_chkpwd-md5_good.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_chkpwd-passverify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_chkpwd-unix_chkpwd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_update-bigcrypt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_update-md5_broken.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_update-md5_good.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_update-passverify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix_update-unix_update.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yppasswd_xdr.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 $@ $< bigcrypt-bigcrypt.o: bigcrypt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bigcrypt_CFLAGS) $(CFLAGS) -MT bigcrypt-bigcrypt.o -MD -MP -MF $(DEPDIR)/bigcrypt-bigcrypt.Tpo -c -o bigcrypt-bigcrypt.o `test -f 'bigcrypt.c' || echo '$(srcdir)/'`bigcrypt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/bigcrypt-bigcrypt.Tpo $(DEPDIR)/bigcrypt-bigcrypt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bigcrypt.c' object='bigcrypt-bigcrypt.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) $(bigcrypt_CFLAGS) $(CFLAGS) -c -o bigcrypt-bigcrypt.o `test -f 'bigcrypt.c' || echo '$(srcdir)/'`bigcrypt.c bigcrypt-bigcrypt.obj: bigcrypt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bigcrypt_CFLAGS) $(CFLAGS) -MT bigcrypt-bigcrypt.obj -MD -MP -MF $(DEPDIR)/bigcrypt-bigcrypt.Tpo -c -o bigcrypt-bigcrypt.obj `if test -f 'bigcrypt.c'; then $(CYGPATH_W) 'bigcrypt.c'; else $(CYGPATH_W) '$(srcdir)/bigcrypt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/bigcrypt-bigcrypt.Tpo $(DEPDIR)/bigcrypt-bigcrypt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bigcrypt.c' object='bigcrypt-bigcrypt.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) $(bigcrypt_CFLAGS) $(CFLAGS) -c -o bigcrypt-bigcrypt.obj `if test -f 'bigcrypt.c'; then $(CYGPATH_W) 'bigcrypt.c'; else $(CYGPATH_W) '$(srcdir)/bigcrypt.c'; fi` bigcrypt-bigcrypt_main.o: bigcrypt_main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bigcrypt_CFLAGS) $(CFLAGS) -MT bigcrypt-bigcrypt_main.o -MD -MP -MF $(DEPDIR)/bigcrypt-bigcrypt_main.Tpo -c -o bigcrypt-bigcrypt_main.o `test -f 'bigcrypt_main.c' || echo '$(srcdir)/'`bigcrypt_main.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/bigcrypt-bigcrypt_main.Tpo $(DEPDIR)/bigcrypt-bigcrypt_main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bigcrypt_main.c' object='bigcrypt-bigcrypt_main.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) $(bigcrypt_CFLAGS) $(CFLAGS) -c -o bigcrypt-bigcrypt_main.o `test -f 'bigcrypt_main.c' || echo '$(srcdir)/'`bigcrypt_main.c bigcrypt-bigcrypt_main.obj: bigcrypt_main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bigcrypt_CFLAGS) $(CFLAGS) -MT bigcrypt-bigcrypt_main.obj -MD -MP -MF $(DEPDIR)/bigcrypt-bigcrypt_main.Tpo -c -o bigcrypt-bigcrypt_main.obj `if test -f 'bigcrypt_main.c'; then $(CYGPATH_W) 'bigcrypt_main.c'; else $(CYGPATH_W) '$(srcdir)/bigcrypt_main.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/bigcrypt-bigcrypt_main.Tpo $(DEPDIR)/bigcrypt-bigcrypt_main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bigcrypt_main.c' object='bigcrypt-bigcrypt_main.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) $(bigcrypt_CFLAGS) $(CFLAGS) -c -o bigcrypt-bigcrypt_main.obj `if test -f 'bigcrypt_main.c'; then $(CYGPATH_W) 'bigcrypt_main.c'; else $(CYGPATH_W) '$(srcdir)/bigcrypt_main.c'; fi` unix_chkpwd-unix_chkpwd.o: unix_chkpwd.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-unix_chkpwd.o -MD -MP -MF $(DEPDIR)/unix_chkpwd-unix_chkpwd.Tpo -c -o unix_chkpwd-unix_chkpwd.o `test -f 'unix_chkpwd.c' || echo '$(srcdir)/'`unix_chkpwd.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-unix_chkpwd.Tpo $(DEPDIR)/unix_chkpwd-unix_chkpwd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='unix_chkpwd.c' object='unix_chkpwd-unix_chkpwd.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-unix_chkpwd.o `test -f 'unix_chkpwd.c' || echo '$(srcdir)/'`unix_chkpwd.c unix_chkpwd-unix_chkpwd.obj: unix_chkpwd.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-unix_chkpwd.obj -MD -MP -MF $(DEPDIR)/unix_chkpwd-unix_chkpwd.Tpo -c -o unix_chkpwd-unix_chkpwd.obj `if test -f 'unix_chkpwd.c'; then $(CYGPATH_W) 'unix_chkpwd.c'; else $(CYGPATH_W) '$(srcdir)/unix_chkpwd.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-unix_chkpwd.Tpo $(DEPDIR)/unix_chkpwd-unix_chkpwd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='unix_chkpwd.c' object='unix_chkpwd-unix_chkpwd.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-unix_chkpwd.obj `if test -f 'unix_chkpwd.c'; then $(CYGPATH_W) 'unix_chkpwd.c'; else $(CYGPATH_W) '$(srcdir)/unix_chkpwd.c'; fi` unix_chkpwd-md5_good.o: md5_good.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-md5_good.o -MD -MP -MF $(DEPDIR)/unix_chkpwd-md5_good.Tpo -c -o unix_chkpwd-md5_good.o `test -f 'md5_good.c' || echo '$(srcdir)/'`md5_good.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-md5_good.Tpo $(DEPDIR)/unix_chkpwd-md5_good.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5_good.c' object='unix_chkpwd-md5_good.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-md5_good.o `test -f 'md5_good.c' || echo '$(srcdir)/'`md5_good.c unix_chkpwd-md5_good.obj: md5_good.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-md5_good.obj -MD -MP -MF $(DEPDIR)/unix_chkpwd-md5_good.Tpo -c -o unix_chkpwd-md5_good.obj `if test -f 'md5_good.c'; then $(CYGPATH_W) 'md5_good.c'; else $(CYGPATH_W) '$(srcdir)/md5_good.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-md5_good.Tpo $(DEPDIR)/unix_chkpwd-md5_good.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5_good.c' object='unix_chkpwd-md5_good.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-md5_good.obj `if test -f 'md5_good.c'; then $(CYGPATH_W) 'md5_good.c'; else $(CYGPATH_W) '$(srcdir)/md5_good.c'; fi` unix_chkpwd-md5_broken.o: md5_broken.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-md5_broken.o -MD -MP -MF $(DEPDIR)/unix_chkpwd-md5_broken.Tpo -c -o unix_chkpwd-md5_broken.o `test -f 'md5_broken.c' || echo '$(srcdir)/'`md5_broken.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-md5_broken.Tpo $(DEPDIR)/unix_chkpwd-md5_broken.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5_broken.c' object='unix_chkpwd-md5_broken.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-md5_broken.o `test -f 'md5_broken.c' || echo '$(srcdir)/'`md5_broken.c unix_chkpwd-md5_broken.obj: md5_broken.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-md5_broken.obj -MD -MP -MF $(DEPDIR)/unix_chkpwd-md5_broken.Tpo -c -o unix_chkpwd-md5_broken.obj `if test -f 'md5_broken.c'; then $(CYGPATH_W) 'md5_broken.c'; else $(CYGPATH_W) '$(srcdir)/md5_broken.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-md5_broken.Tpo $(DEPDIR)/unix_chkpwd-md5_broken.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5_broken.c' object='unix_chkpwd-md5_broken.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-md5_broken.obj `if test -f 'md5_broken.c'; then $(CYGPATH_W) 'md5_broken.c'; else $(CYGPATH_W) '$(srcdir)/md5_broken.c'; fi` unix_chkpwd-bigcrypt.o: bigcrypt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-bigcrypt.o -MD -MP -MF $(DEPDIR)/unix_chkpwd-bigcrypt.Tpo -c -o unix_chkpwd-bigcrypt.o `test -f 'bigcrypt.c' || echo '$(srcdir)/'`bigcrypt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-bigcrypt.Tpo $(DEPDIR)/unix_chkpwd-bigcrypt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bigcrypt.c' object='unix_chkpwd-bigcrypt.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-bigcrypt.o `test -f 'bigcrypt.c' || echo '$(srcdir)/'`bigcrypt.c unix_chkpwd-bigcrypt.obj: bigcrypt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-bigcrypt.obj -MD -MP -MF $(DEPDIR)/unix_chkpwd-bigcrypt.Tpo -c -o unix_chkpwd-bigcrypt.obj `if test -f 'bigcrypt.c'; then $(CYGPATH_W) 'bigcrypt.c'; else $(CYGPATH_W) '$(srcdir)/bigcrypt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-bigcrypt.Tpo $(DEPDIR)/unix_chkpwd-bigcrypt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bigcrypt.c' object='unix_chkpwd-bigcrypt.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-bigcrypt.obj `if test -f 'bigcrypt.c'; then $(CYGPATH_W) 'bigcrypt.c'; else $(CYGPATH_W) '$(srcdir)/bigcrypt.c'; fi` unix_chkpwd-passverify.o: passverify.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-passverify.o -MD -MP -MF $(DEPDIR)/unix_chkpwd-passverify.Tpo -c -o unix_chkpwd-passverify.o `test -f 'passverify.c' || echo '$(srcdir)/'`passverify.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-passverify.Tpo $(DEPDIR)/unix_chkpwd-passverify.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='passverify.c' object='unix_chkpwd-passverify.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-passverify.o `test -f 'passverify.c' || echo '$(srcdir)/'`passverify.c unix_chkpwd-passverify.obj: passverify.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_chkpwd_CFLAGS) $(CFLAGS) -MT unix_chkpwd-passverify.obj -MD -MP -MF $(DEPDIR)/unix_chkpwd-passverify.Tpo -c -o unix_chkpwd-passverify.obj `if test -f 'passverify.c'; then $(CYGPATH_W) 'passverify.c'; else $(CYGPATH_W) '$(srcdir)/passverify.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_chkpwd-passverify.Tpo $(DEPDIR)/unix_chkpwd-passverify.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='passverify.c' object='unix_chkpwd-passverify.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) $(unix_chkpwd_CFLAGS) $(CFLAGS) -c -o unix_chkpwd-passverify.obj `if test -f 'passverify.c'; then $(CYGPATH_W) 'passverify.c'; else $(CYGPATH_W) '$(srcdir)/passverify.c'; fi` unix_update-unix_update.o: unix_update.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-unix_update.o -MD -MP -MF $(DEPDIR)/unix_update-unix_update.Tpo -c -o unix_update-unix_update.o `test -f 'unix_update.c' || echo '$(srcdir)/'`unix_update.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-unix_update.Tpo $(DEPDIR)/unix_update-unix_update.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='unix_update.c' object='unix_update-unix_update.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-unix_update.o `test -f 'unix_update.c' || echo '$(srcdir)/'`unix_update.c unix_update-unix_update.obj: unix_update.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-unix_update.obj -MD -MP -MF $(DEPDIR)/unix_update-unix_update.Tpo -c -o unix_update-unix_update.obj `if test -f 'unix_update.c'; then $(CYGPATH_W) 'unix_update.c'; else $(CYGPATH_W) '$(srcdir)/unix_update.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-unix_update.Tpo $(DEPDIR)/unix_update-unix_update.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='unix_update.c' object='unix_update-unix_update.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-unix_update.obj `if test -f 'unix_update.c'; then $(CYGPATH_W) 'unix_update.c'; else $(CYGPATH_W) '$(srcdir)/unix_update.c'; fi` unix_update-md5_good.o: md5_good.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-md5_good.o -MD -MP -MF $(DEPDIR)/unix_update-md5_good.Tpo -c -o unix_update-md5_good.o `test -f 'md5_good.c' || echo '$(srcdir)/'`md5_good.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-md5_good.Tpo $(DEPDIR)/unix_update-md5_good.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5_good.c' object='unix_update-md5_good.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-md5_good.o `test -f 'md5_good.c' || echo '$(srcdir)/'`md5_good.c unix_update-md5_good.obj: md5_good.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-md5_good.obj -MD -MP -MF $(DEPDIR)/unix_update-md5_good.Tpo -c -o unix_update-md5_good.obj `if test -f 'md5_good.c'; then $(CYGPATH_W) 'md5_good.c'; else $(CYGPATH_W) '$(srcdir)/md5_good.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-md5_good.Tpo $(DEPDIR)/unix_update-md5_good.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5_good.c' object='unix_update-md5_good.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-md5_good.obj `if test -f 'md5_good.c'; then $(CYGPATH_W) 'md5_good.c'; else $(CYGPATH_W) '$(srcdir)/md5_good.c'; fi` unix_update-md5_broken.o: md5_broken.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-md5_broken.o -MD -MP -MF $(DEPDIR)/unix_update-md5_broken.Tpo -c -o unix_update-md5_broken.o `test -f 'md5_broken.c' || echo '$(srcdir)/'`md5_broken.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-md5_broken.Tpo $(DEPDIR)/unix_update-md5_broken.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5_broken.c' object='unix_update-md5_broken.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-md5_broken.o `test -f 'md5_broken.c' || echo '$(srcdir)/'`md5_broken.c unix_update-md5_broken.obj: md5_broken.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-md5_broken.obj -MD -MP -MF $(DEPDIR)/unix_update-md5_broken.Tpo -c -o unix_update-md5_broken.obj `if test -f 'md5_broken.c'; then $(CYGPATH_W) 'md5_broken.c'; else $(CYGPATH_W) '$(srcdir)/md5_broken.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-md5_broken.Tpo $(DEPDIR)/unix_update-md5_broken.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5_broken.c' object='unix_update-md5_broken.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-md5_broken.obj `if test -f 'md5_broken.c'; then $(CYGPATH_W) 'md5_broken.c'; else $(CYGPATH_W) '$(srcdir)/md5_broken.c'; fi` unix_update-bigcrypt.o: bigcrypt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-bigcrypt.o -MD -MP -MF $(DEPDIR)/unix_update-bigcrypt.Tpo -c -o unix_update-bigcrypt.o `test -f 'bigcrypt.c' || echo '$(srcdir)/'`bigcrypt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-bigcrypt.Tpo $(DEPDIR)/unix_update-bigcrypt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bigcrypt.c' object='unix_update-bigcrypt.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-bigcrypt.o `test -f 'bigcrypt.c' || echo '$(srcdir)/'`bigcrypt.c unix_update-bigcrypt.obj: bigcrypt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-bigcrypt.obj -MD -MP -MF $(DEPDIR)/unix_update-bigcrypt.Tpo -c -o unix_update-bigcrypt.obj `if test -f 'bigcrypt.c'; then $(CYGPATH_W) 'bigcrypt.c'; else $(CYGPATH_W) '$(srcdir)/bigcrypt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-bigcrypt.Tpo $(DEPDIR)/unix_update-bigcrypt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bigcrypt.c' object='unix_update-bigcrypt.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-bigcrypt.obj `if test -f 'bigcrypt.c'; then $(CYGPATH_W) 'bigcrypt.c'; else $(CYGPATH_W) '$(srcdir)/bigcrypt.c'; fi` unix_update-passverify.o: passverify.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-passverify.o -MD -MP -MF $(DEPDIR)/unix_update-passverify.Tpo -c -o unix_update-passverify.o `test -f 'passverify.c' || echo '$(srcdir)/'`passverify.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-passverify.Tpo $(DEPDIR)/unix_update-passverify.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='passverify.c' object='unix_update-passverify.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-passverify.o `test -f 'passverify.c' || echo '$(srcdir)/'`passverify.c unix_update-passverify.obj: passverify.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(unix_update_CFLAGS) $(CFLAGS) -MT unix_update-passverify.obj -MD -MP -MF $(DEPDIR)/unix_update-passverify.Tpo -c -o unix_update-passverify.obj `if test -f 'passverify.c'; then $(CYGPATH_W) 'passverify.c'; else $(CYGPATH_W) '$(srcdir)/passverify.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unix_update-passverify.Tpo $(DEPDIR)/unix_update-passverify.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='passverify.c' object='unix_update-passverify.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) $(unix_update_CFLAGS) $(CFLAGS) -c -o unix_update-passverify.obj `if test -f 'passverify.c'; then $(CYGPATH_W) 'passverify.c'; else $(CYGPATH_W) '$(srcdir)/passverify.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(sbindir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ clean-sbinPROGRAMS clean-securelibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-sbinPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-sbinPROGRAMS \ uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS \ clean-sbinPROGRAMS clean-securelibLTLIBRARIES 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-man8 install-pdf install-pdf-am install-ps \ install-ps-am install-sbinPROGRAMS \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-sbinPROGRAMS uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_unix.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c0000644000000000000000000001464312160065211016421 00000000000000/* * Copyright Alexander O. Yuriev, 1996. All rights reserved. * NIS+ support by Thorsten Kukuk * Copyright Jan Rkorajski, 1999. 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, 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. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include /* indicate the following groups are defined */ #ifdef PAM_STATIC # include "pam_unix_static.h" #else # define PAM_SM_AUTH #endif #define _PAM_EXTERN_FUNCTIONS #include #include #include #include "support.h" /* * PAM framework looks for these entry-points to pass control to the * authentication module. */ /* Fun starts here :) * pam_sm_authenticate() performs UNIX/shadow authentication * * First, if shadow support is available, attempt to perform * authentication using shadow passwords. If shadow is not * available, or user does not have a shadow password, fallback * onto a normal UNIX authentication */ #define _UNIX_AUTHTOK "-UN*X-PASS" #define AUTH_RETURN \ do { \ if (on(UNIX_LIKE_AUTH, ctrl) && ret_data) { \ D(("recording return code for next time [%d]", \ retval)); \ *ret_data = retval; \ pam_set_data(pamh, "unix_setcred_return", \ (void *) ret_data, setcred_free); \ } else if (ret_data) \ free (ret_data); \ D(("done. [%s]", pam_strerror(pamh, retval))); \ return retval; \ } while (0) static void setcred_free (pam_handle_t *pamh UNUSED, void *ptr, int err UNUSED) { if (ptr) free (ptr); } int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) { unsigned int ctrl; int retval, *ret_data = NULL; const char *name; const void *p; D(("called.")); ctrl = _set_ctrl(pamh, flags, NULL, NULL, NULL, argc, argv); /* Get a few bytes so we can pass our return value to pam_sm_setcred(). */ if (on(UNIX_LIKE_AUTH, ctrl)) ret_data = malloc(sizeof(int)); /* get the user'name' */ retval = pam_get_user(pamh, &name, NULL); if (retval == PAM_SUCCESS) { /* * Various libraries at various times have had bugs related to * '+' or '-' as the first character of a user name. Don't * allow this characters here. */ if (name == NULL || name[0] == '-' || name[0] == '+') { pam_syslog(pamh, LOG_ERR, "bad username [%s]", name); retval = PAM_USER_UNKNOWN; AUTH_RETURN; } if (on(UNIX_DEBUG, ctrl)) D(("username [%s] obtained", name)); } else { D(("trouble reading username")); if (retval == PAM_CONV_AGAIN) { D(("pam_get_user/conv() function is not ready yet")); /* it is safe to resume this function so we translate this * retval to the value that indicates we're happy to resume. */ retval = PAM_INCOMPLETE; } AUTH_RETURN; } /* if this user does not have a password... */ if (_unix_blankpasswd(pamh, ctrl, name)) { D(("user '%s' has blank passwd", name)); name = NULL; retval = PAM_SUCCESS; AUTH_RETURN; } /* get this user's authentication token */ retval = _unix_read_password(pamh, ctrl, NULL, _("Password: "), NULL ,_UNIX_AUTHTOK, &p); if (retval != PAM_SUCCESS) { if (retval != PAM_CONV_AGAIN) { pam_syslog(pamh, LOG_CRIT, "auth could not identify password for [%s]", name); } else { D(("conversation function is not ready yet")); /* * it is safe to resume this function so we translate this * retval to the value that indicates we're happy to resume. */ retval = PAM_INCOMPLETE; } name = NULL; AUTH_RETURN; } D(("user=%s, password=[%s]", name, p)); /* verify the password of this user */ retval = _unix_verify_password(pamh, name, p, ctrl); name = p = NULL; AUTH_RETURN; } /* * The only thing _pam_set_credentials_unix() does is initialization of * UNIX group IDs. * * Well, everybody but me on linux-pam is convinced that it should not * initialize group IDs, so I am not doing it but don't say that I haven't * warned you. -- AOY */ int pam_sm_setcred (pam_handle_t *pamh, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { int retval; const void *pretval = NULL; D(("called.")); retval = PAM_SUCCESS; D(("recovering return code from auth call")); /* We will only find something here if UNIX_LIKE_AUTH is set -- don't worry about an explicit check of argv. */ if (pam_get_data(pamh, "unix_setcred_return", &pretval) == PAM_SUCCESS && pretval) { retval = *(const int *)pretval; pam_set_data(pamh, "unix_setcred_return", NULL, NULL); D(("recovered data indicates that old retval was %d", retval)); } return retval; } Linux-PAM-1.1.8/modules/pam_unix/unix_chkpwd.8.xml0000644000000000000000000000360312160065211016621 00000000000000 unix_chkpwd 8 Linux-PAM Manual unix_chkpwd Helper binary that verifies the password of the current user unix_chkpwd ... DESCRIPTION unix_chkpwd is a helper program for the pam_unix module that verifies the password of the current user. It also checks password and account expiration dates in shadow. It is not intended to be run directly from the command line and logs a security violation if done so. It is typically installed setuid root or setgid shadow. The interface of the helper - command line options, and input/output data format are internal to the pam_unix module and it should not be called directly from applications. SEE ALSO pam_unix8 AUTHOR Written by Andrew Morgan and other various people. Linux-PAM-1.1.8/modules/pam_unix/md5_good.c0000644000000000000000000000012612160065211015244 00000000000000#define HIGHFIRST #define MD5Name(x) Good##x #include "md5.c" #include "md5_crypt.c" Linux-PAM-1.1.8/modules/pam_unix/passverify.h0000644000000000000000000000713612160065211015757 00000000000000/* * Copyright information at end of file. */ #include #include #include #define PAM_UNIX_RUN_HELPER PAM_CRED_INSUFFICIENT #define MAXPASS 200 /* the maximum length of a password */ #define OLD_PASSWORDS_FILE "/etc/security/opasswd" int verify_pwd_hash(const char *p, char *hash, unsigned int nullok); int is_pwd_shadowed(const struct passwd *pwd); char * crypt_md5_wrapper(const char *pass_new); int unix_selinux_confined(void); int lock_pwdf(void); void unlock_pwdf(void); #ifdef HELPER_COMPILE int save_old_password(const char *forwho, const char *oldpass, int howmany); #else int save_old_password(pam_handle_t *pamh, const char *forwho, const char *oldpass, int howmany); #endif #ifdef HELPER_COMPILE void helper_log_err(int err, const char *format,...); int helper_verify_password(const char *name, const char *p, int nullok); void setup_signals(void); char * getuidname(uid_t uid); int read_passwords(int fd, int npass, char **passwords); #endif #ifdef HELPER_COMPILE #define PAMH_ARG_DECL(fname, ...) fname(__VA_ARGS__) #define PAMH_ARG(...) __VA_ARGS__ #else #define PAMH_ARG_DECL(fname, ...) fname(pam_handle_t *pamh, __VA_ARGS__) #define PAMH_ARG(...) pamh, __VA_ARGS__ #endif PAMH_ARG_DECL(char * create_password_hash, const char *password, unsigned int ctrl, int rounds); PAMH_ARG_DECL(int get_account_info, const char *name, struct passwd **pwd, struct spwd **spwdent); PAMH_ARG_DECL(int get_pwd_hash, const char *name, struct passwd **pwd, char **hash); PAMH_ARG_DECL(int check_shadow_expiry, struct spwd *spent, int *daysleft); PAMH_ARG_DECL(int unix_update_passwd, const char *forwho, const char *towhat); PAMH_ARG_DECL(int unix_update_shadow, const char *forwho, char *towhat); /* ****************************************************************** * * Copyright (c) Red Hat, Inc. 2007. * * 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. */ Linux-PAM-1.1.8/modules/pam_unix/pam_unix_sess.c0000644000000000000000000001050612160065211016427 00000000000000/* * $Id$ * * Copyright Alexander O. Yuriev, 1996. All rights reserved. * Copyright Jan Rkorajski, 1999. 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, 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. */ #include "config.h" #include #include #include #include #include #include #include #include /* indicate the following groups are defined */ #ifdef PAM_STATIC # include "pam_unix_static.h" #else # define PAM_SM_SESSION #endif #include #include #include #include #include "support.h" /* * PAM framework looks for these entry-points to pass control to the * session module. */ int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) { char *user_name, *service; unsigned int ctrl; int retval; const char *login_name; D(("called.")); ctrl = _set_ctrl(pamh, flags, NULL, NULL, NULL, argc, argv); retval = pam_get_item(pamh, PAM_USER, (void *) &user_name); if (user_name == NULL || *user_name == '\0' || retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_CRIT, "open_session - error recovering username"); return PAM_SESSION_ERR; /* How did we get authenticated with no username?! */ } retval = pam_get_item(pamh, PAM_SERVICE, (void *) &service); if (service == NULL || *service == '\0' || retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_CRIT, "open_session - error recovering service"); return PAM_SESSION_ERR; } login_name = pam_modutil_getlogin(pamh); if (login_name == NULL) { login_name = ""; } pam_syslog(pamh, LOG_INFO, "session opened for user %s by %s(uid=%lu)", user_name, login_name, (unsigned long)getuid()); return PAM_SUCCESS; } int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv) { char *user_name, *service; unsigned int ctrl; int retval; D(("called.")); ctrl = _set_ctrl(pamh, flags, NULL, NULL, NULL, argc, argv); retval = pam_get_item(pamh, PAM_USER, (void *) &user_name); if (user_name == NULL || *user_name == '\0' || retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_CRIT, "close_session - error recovering username"); return PAM_SESSION_ERR; /* How did we get authenticated with no username?! */ } retval = pam_get_item(pamh, PAM_SERVICE, (void *) &service); if (service == NULL || *service == '\0' || retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_CRIT, "close_session - error recovering service"); return PAM_SESSION_ERR; } pam_syslog(pamh, LOG_INFO, "session closed for user %s", user_name); return PAM_SUCCESS; } Linux-PAM-1.1.8/modules/pam_unix/pam_unix_static.c0000644000000000000000000000062412160065211016741 00000000000000#include "config.h" #ifdef PAM_STATIC #define static extern #define PAM_SM_ACCOUNT #define PAM_SM_AUTH #define PAM_SM_PASSWORD #define PAM_SM_SESSION #include "pam_unix_static.h" #include struct pam_module _pam_unix_modstruct = { "pam_unix", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, pam_sm_chauthtok, }; #endif Linux-PAM-1.1.8/modules/pam_unix/unix_update.80000644000000000000000000000405612216527615016044 00000000000000'\" t .\" Title: unix_update .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "UNIX_UPDATE" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" unix_update \- Helper binary that updates the password of a given user .SH "SYNOPSIS" .HP \w'\fBunix_update\fR\ 'u \fBunix_update\fR [\&.\&.\&.] .SH "DESCRIPTION" .PP \fIunix_update\fR is a helper program for the \fIpam_unix\fR module that updates the password of a given user\&. It is not intended to be run directly from the command line and logs a security violation if done so\&. .PP The purpose of the helper is to enable tighter confinement of login and password changing services\&. The helper is thus called only when SELinux is enabled on the system\&. .PP The interface of the helper \- command line options, and input/output data format are internal to the \fIpam_unix\fR module and it should not be called directly from applications\&. .SH "SEE ALSO" .PP \fBpam_unix\fR(8) .SH "AUTHOR" .PP Written by Tomas Mraz and other various people\&. Linux-PAM-1.1.8/modules/pam_unix/passverify.c0000644000000000000000000006660512160065211015760 00000000000000/* * Copyright information at end of file. */ #include "config.h" #include #include #include "support.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_LIBXCRYPT #include #elif defined(HAVE_CRYPT_H) #include #endif #include "md5.h" #include "bigcrypt.h" #include "passverify.h" #ifdef WITH_SELINUX #include #define SELINUX_ENABLED is_selinux_enabled()>0 #else #define SELINUX_ENABLED 0 #endif #ifdef HELPER_COMPILE #define pam_modutil_getpwnam(h,n) getpwnam(n) #define pam_modutil_getspnam(h,n) getspnam(n) #define pam_syslog(h,a,b,c) helper_log_err(a,b,c) #else #include #include #endif #if defined(USE_LCKPWDF) && !defined(HAVE_LCKPWDF) # include "./lckpwdf.-c" #endif static void strip_hpux_aging(char *hash) { static const char valid[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789./"; if ((*hash != '$') && (strlen(hash) > 13)) { for (hash += 13; *hash != '\0'; hash++) { if (strchr(valid, *hash) == NULL) { *hash = '\0'; break; } } } } int verify_pwd_hash(const char *p, char *hash, unsigned int nullok) { size_t hash_len; char *pp = NULL; int retval; D(("called")); strip_hpux_aging(hash); hash_len = strlen(hash); if (!hash_len) { /* the stored password is NULL */ if (nullok) { /* this means we've succeeded */ D(("user has empty password - access granted")); retval = PAM_SUCCESS; } else { D(("user has empty password - access denied")); retval = PAM_AUTH_ERR; } } else if (!p || *hash == '*' || *hash == '!') { retval = PAM_AUTH_ERR; } else { if (!strncmp(hash, "$1$", 3)) { pp = Goodcrypt_md5(p, hash); if (pp && strcmp(pp, hash) != 0) { _pam_delete(pp); pp = Brokencrypt_md5(p, hash); } } else if (*hash != '$' && hash_len >= 13) { pp = bigcrypt(p, hash); if (pp && hash_len == 13 && strlen(pp) > hash_len) { _pam_overwrite(pp + hash_len); } } else { /* * Ok, we don't know the crypt algorithm, but maybe * libcrypt knows about it? We should try it. */ #ifdef HAVE_CRYPT_R struct crypt_data *cdata; cdata = malloc(sizeof(*cdata)); if (cdata != NULL) { cdata->initialized = 0; pp = x_strdup(crypt_r(p, hash, cdata)); memset(cdata, '\0', sizeof(*cdata)); free(cdata); } #else pp = x_strdup(crypt(p, hash)); #endif } p = NULL; /* no longer needed here */ /* the moment of truth -- do we agree with the password? */ D(("comparing state of pp[%s] and hash[%s]", pp, hash)); if (pp && strcmp(pp, hash) == 0) { retval = PAM_SUCCESS; } else { retval = PAM_AUTH_ERR; } } if (pp) _pam_delete(pp); D(("done [%d].", retval)); return retval; } int is_pwd_shadowed(const struct passwd *pwd) { if (pwd != NULL) { if (strcmp(pwd->pw_passwd, "x") == 0) { return 1; } if ((pwd->pw_passwd[0] == '#') && (pwd->pw_passwd[1] == '#') && (strcmp(pwd->pw_name, pwd->pw_passwd + 2) == 0)) { return 1; } } return 0; } PAMH_ARG_DECL(int get_account_info, const char *name, struct passwd **pwd, struct spwd **spwdent) { /* UNIX passwords area */ *pwd = pam_modutil_getpwnam(pamh, name); /* Get password file entry... */ *spwdent = NULL; if (*pwd != NULL) { if (strcmp((*pwd)->pw_passwd, "*NP*") == 0) { /* NIS+ */ #ifdef HELPER_COMPILE uid_t save_euid, save_uid; save_euid = geteuid(); save_uid = getuid(); if (save_uid == (*pwd)->pw_uid) setreuid(save_euid, save_uid); else { setreuid(0, -1); if (setreuid(-1, (*pwd)->pw_uid) == -1) { setreuid(-1, 0); setreuid(0, -1); if(setreuid(-1, (*pwd)->pw_uid) == -1) return PAM_CRED_INSUFFICIENT; } } *spwdent = pam_modutil_getspnam(pamh, name); if (save_uid == (*pwd)->pw_uid) setreuid(save_uid, save_euid); else { setreuid(-1, 0); setreuid(save_uid, -1); setreuid(-1, save_euid); } if (*spwdent == NULL || (*spwdent)->sp_pwdp == NULL) return PAM_AUTHINFO_UNAVAIL; #else /* we must run helper for NIS+ passwords */ return PAM_UNIX_RUN_HELPER; #endif } else if (is_pwd_shadowed(*pwd)) { /* * ...and shadow password file entry for this user, * if shadowing is enabled */ #ifndef HELPER_COMPILE if (geteuid() || SELINUX_ENABLED) return PAM_UNIX_RUN_HELPER; #endif *spwdent = pam_modutil_getspnam(pamh, name); if (*spwdent == NULL || (*spwdent)->sp_pwdp == NULL) return PAM_AUTHINFO_UNAVAIL; } } else { return PAM_USER_UNKNOWN; } return PAM_SUCCESS; } PAMH_ARG_DECL(int get_pwd_hash, const char *name, struct passwd **pwd, char **hash) { int retval; struct spwd *spwdent = NULL; retval = get_account_info(PAMH_ARG(name, pwd, &spwdent)); if (retval != PAM_SUCCESS) { return retval; } if (spwdent) *hash = x_strdup(spwdent->sp_pwdp); else *hash = x_strdup((*pwd)->pw_passwd); if (*hash == NULL) return PAM_BUF_ERR; return PAM_SUCCESS; } PAMH_ARG_DECL(int check_shadow_expiry, struct spwd *spent, int *daysleft) { long int curdays; *daysleft = -1; curdays = (long int)(time(NULL) / (60 * 60 * 24)); D(("today is %d, last change %d", curdays, spent->sp_lstchg)); if ((curdays >= spent->sp_expire) && (spent->sp_expire != -1)) { D(("account expired")); return PAM_ACCT_EXPIRED; } if (spent->sp_lstchg == 0) { D(("need a new password")); *daysleft = 0; return PAM_NEW_AUTHTOK_REQD; } if (curdays < spent->sp_lstchg) { pam_syslog(pamh, LOG_DEBUG, "account %s has password changed in future", spent->sp_namp); return PAM_SUCCESS; } if ((curdays - spent->sp_lstchg > spent->sp_max) && (curdays - spent->sp_lstchg > spent->sp_inact) && (curdays - spent->sp_lstchg > spent->sp_max + spent->sp_inact) && (spent->sp_max != -1) && (spent->sp_inact != -1)) { *daysleft = (int)((spent->sp_lstchg + spent->sp_max) - curdays); D(("authtok expired")); return PAM_AUTHTOK_EXPIRED; } if ((curdays - spent->sp_lstchg > spent->sp_max) && (spent->sp_max != -1)) { D(("need a new password 2")); return PAM_NEW_AUTHTOK_REQD; } if ((curdays - spent->sp_lstchg > spent->sp_max - spent->sp_warn) && (spent->sp_max != -1) && (spent->sp_warn != -1)) { *daysleft = (int)((spent->sp_lstchg + spent->sp_max) - curdays); D(("warn before expiry")); } if ((curdays - spent->sp_lstchg < spent->sp_min) && (spent->sp_min != -1)) { /* * The last password change was too recent. This error will be ignored * if no password change is attempted. */ D(("password change too recent")); return PAM_AUTHTOK_ERR; } return PAM_SUCCESS; } /* passwd/salt conversion macros */ #define PW_TMPFILE "/etc/npasswd" #define SH_TMPFILE "/etc/nshadow" #define OPW_TMPFILE "/etc/security/nopasswd" /* * i64c - convert an integer to a radix 64 character */ static int i64c(int i) { if (i < 0) return ('.'); else if (i > 63) return ('z'); if (i == 0) return ('.'); if (i == 1) return ('/'); if (i >= 2 && i <= 11) return ('0' - 2 + i); if (i >= 12 && i <= 37) return ('A' - 12 + i); if (i >= 38 && i <= 63) return ('a' - 38 + i); return ('\0'); } /* must point to a buffer of at least +1 length */ static void crypt_make_salt(char *where, int length) { struct timeval tv; MD5_CTX ctx; unsigned char tmp[16]; unsigned char *src = (unsigned char *)where; int i; #ifdef PAM_PATH_RANDOMDEV int fd; int rv; if ((rv = fd = open(PAM_PATH_RANDOMDEV, O_RDONLY)) != -1) { while ((rv = read(fd, where, length)) != length && errno == EINTR); close (fd); } if (rv != length) { #endif /* * Code lifted from Marek Michalkiewicz's shadow suite. (CG) * removed use of static variables (AGM) * * will work correctly only for length <= 16 */ src = tmp; GoodMD5Init(&ctx); gettimeofday(&tv, (struct timezone *) 0); GoodMD5Update(&ctx, (void *) &tv, sizeof tv); i = getpid(); GoodMD5Update(&ctx, (void *) &i, sizeof i); i = clock(); GoodMD5Update(&ctx, (void *) &i, sizeof i); GoodMD5Update(&ctx, src, length); GoodMD5Final(tmp, &ctx); #ifdef PAM_PATH_RANDOMDEV } #endif for (i = 0; i < length; i++) *where++ = i64c(src[i] & 077); *where = '\0'; } char * crypt_md5_wrapper(const char *pass_new) { unsigned char result[16]; char *cp = (char *) result; cp = stpcpy(cp, "$1$"); /* magic for the MD5 */ crypt_make_salt(cp, 8); /* no longer need cleartext */ cp = Goodcrypt_md5(pass_new, (const char *) result); pass_new = NULL; return cp; } PAMH_ARG_DECL(char * create_password_hash, const char *password, unsigned int ctrl, int rounds) { const char *algoid; char salt[64]; /* contains rounds number + max 16 bytes of salt + algo id */ char *sp; if (on(UNIX_MD5_PASS, ctrl)) { /* algoid = "$1" */ return crypt_md5_wrapper(password); } else if (on(UNIX_BLOWFISH_PASS, ctrl)) { algoid = "$2a$"; } else if (on(UNIX_SHA256_PASS, ctrl)) { algoid = "$5$"; } else if (on(UNIX_SHA512_PASS, ctrl)) { algoid = "$6$"; } else { /* must be crypt/bigcrypt */ char tmppass[9]; char *crypted; crypt_make_salt(salt, 2); if (off(UNIX_BIGCRYPT, ctrl) && strlen(password) > 8) { strncpy(tmppass, password, sizeof(tmppass)-1); tmppass[sizeof(tmppass)-1] = '\0'; password = tmppass; } crypted = bigcrypt(password, salt); memset(tmppass, '\0', sizeof(tmppass)); password = NULL; return crypted; } #ifdef HAVE_CRYPT_GENSALT_R if (on(UNIX_BLOWFISH_PASS, ctrl)) { char entropy[17]; crypt_make_salt(entropy, sizeof(entropy) - 1); sp = crypt_gensalt_r (algoid, rounds, entropy, sizeof(entropy), salt, sizeof(salt)); } else { #endif sp = stpcpy(salt, algoid); if (on(UNIX_ALGO_ROUNDS, ctrl)) { sp += snprintf(sp, sizeof(salt) - 3, "rounds=%u$", rounds); } crypt_make_salt(sp, 8); /* For now be conservative so the resulting hashes * are not too long. 8 bytes of salt prevents dictionary * attacks well enough. */ #ifdef HAVE_CRYPT_GENSALT_R } #endif sp = crypt(password, salt); if (!sp || strncmp(algoid, sp, strlen(algoid)) != 0) { /* libxcrypt/libc doesn't know the algorithm, use MD5 */ pam_syslog(pamh, LOG_ERR, "Algo %s not supported by the crypto backend, " "falling back to MD5\n", on(UNIX_BLOWFISH_PASS, ctrl) ? "blowfish" : on(UNIX_SHA256_PASS, ctrl) ? "sha256" : on(UNIX_SHA512_PASS, ctrl) ? "sha512" : algoid); if(sp) { memset(sp, '\0', strlen(sp)); } return crypt_md5_wrapper(password); } return x_strdup(sp); } #ifdef WITH_SELINUX int unix_selinux_confined(void) { static int confined = -1; int fd; char tempfile[]="/etc/.pwdXXXXXX"; if (confined != -1) return confined; /* cannot be confined without SELinux enabled */ if (!SELINUX_ENABLED){ confined = 0; return confined; } /* let's try opening shadow read only */ if ((fd=open("/etc/shadow", O_RDONLY)) != -1) { close(fd); confined = 0; return confined; } if (errno == EACCES) { confined = 1; return confined; } /* shadow opening failed because of other reasons let's try creating a file in /etc */ if ((fd=mkstemp(tempfile)) != -1) { unlink(tempfile); close(fd); confined = 0; return confined; } confined = 1; return confined; } #else int unix_selinux_confined(void) { return 0; } #endif #ifdef USE_LCKPWDF int lock_pwdf(void) { int i; int retval; #ifndef HELPER_COMPILE if (unix_selinux_confined()) { return PAM_SUCCESS; } #endif /* These values for the number of attempts and the sleep time are, of course, completely arbitrary. My reading of the PAM docs is that, once pam_chauthtok() has been called with PAM_UPDATE_AUTHTOK, we are obliged to take any reasonable steps to make sure the token is updated; so retrying for 1/10 sec. isn't overdoing it. */ i=0; while((retval = lckpwdf()) != 0 && i < 100) { usleep(1000); i++; } if(retval != 0) { return PAM_AUTHTOK_LOCK_BUSY; } return PAM_SUCCESS; } void unlock_pwdf(void) { #ifndef HELPER_COMPILE if (unix_selinux_confined()) { return; } #endif ulckpwdf(); } #else int lock_pwdf(void) { return PAM_SUCCESS; } void unlock_pwdf(void) { return; } #endif #ifdef HELPER_COMPILE int save_old_password(const char *forwho, const char *oldpass, int howmany) #else int save_old_password(pam_handle_t *pamh, const char *forwho, const char *oldpass, int howmany) #endif { static char buf[16384]; static char nbuf[16384]; char *s_luser, *s_uid, *s_npas, *s_pas, *pass; int npas; FILE *pwfile, *opwfile; int err = 0; int oldmask; int found = 0; struct passwd *pwd = NULL; struct stat st; size_t len = strlen(forwho); #ifdef WITH_SELINUX security_context_t prev_context=NULL; #endif if (howmany < 0) { return PAM_SUCCESS; } if (oldpass == NULL) { return PAM_SUCCESS; } oldmask = umask(077); #ifdef WITH_SELINUX if (SELINUX_ENABLED) { security_context_t passwd_context=NULL; if (getfilecon("/etc/passwd",&passwd_context)<0) { return PAM_AUTHTOK_ERR; }; if (getfscreatecon(&prev_context)<0) { freecon(passwd_context); return PAM_AUTHTOK_ERR; } if (setfscreatecon(passwd_context)) { freecon(passwd_context); freecon(prev_context); return PAM_AUTHTOK_ERR; } freecon(passwd_context); } #endif pwfile = fopen(OPW_TMPFILE, "w"); umask(oldmask); if (pwfile == NULL) { err = 1; goto done; } opwfile = fopen(OLD_PASSWORDS_FILE, "r"); if (opwfile == NULL) { fclose(pwfile); err = 1; goto done; } if (fstat(fileno(opwfile), &st) == -1) { fclose(opwfile); fclose(pwfile); err = 1; goto done; } if (fchown(fileno(pwfile), st.st_uid, st.st_gid) == -1) { fclose(opwfile); fclose(pwfile); err = 1; goto done; } if (fchmod(fileno(pwfile), st.st_mode) == -1) { fclose(opwfile); fclose(pwfile); err = 1; goto done; } while (fgets(buf, 16380, opwfile)) { if (!strncmp(buf, forwho, len) && strchr(":,\n", buf[len]) != NULL) { char *sptr = NULL; found = 1; if (howmany == 0) continue; buf[strlen(buf) - 1] = '\0'; s_luser = strtok_r(buf, ":", &sptr); s_uid = strtok_r(NULL, ":", &sptr); s_npas = strtok_r(NULL, ":", &sptr); s_pas = strtok_r(NULL, ":", &sptr); npas = strtol(s_npas, NULL, 10) + 1; while (npas > howmany) { s_pas = strpbrk(s_pas, ","); if (s_pas != NULL) s_pas++; npas--; } pass = crypt_md5_wrapper(oldpass); if (s_pas == NULL) snprintf(nbuf, sizeof(nbuf), "%s:%s:%d:%s\n", s_luser, s_uid, npas, pass); else snprintf(nbuf, sizeof(nbuf),"%s:%s:%d:%s,%s\n", s_luser, s_uid, npas, s_pas, pass); _pam_delete(pass); if (fputs(nbuf, pwfile) < 0) { err = 1; break; } } else if (fputs(buf, pwfile) < 0) { err = 1; break; } } fclose(opwfile); if (!found) { pwd = pam_modutil_getpwnam(pamh, forwho); if (pwd == NULL) { err = 1; } else { pass = crypt_md5_wrapper(oldpass); snprintf(nbuf, sizeof(nbuf), "%s:%lu:1:%s\n", forwho, (unsigned long)pwd->pw_uid, pass); _pam_delete(pass); if (fputs(nbuf, pwfile) < 0) { err = 1; } } } if (fflush(pwfile) || fsync(fileno(pwfile))) { D(("fflush or fsync error writing entries to old passwords file: %m")); err = 1; } if (fclose(pwfile)) { D(("fclose error writing entries to old passwords file: %m")); err = 1; } done: if (!err) { if (rename(OPW_TMPFILE, OLD_PASSWORDS_FILE)) err = 1; } #ifdef WITH_SELINUX if (SELINUX_ENABLED) { if (setfscreatecon(prev_context)) { err = 1; } if (prev_context) freecon(prev_context); prev_context=NULL; } #endif if (!err) { return PAM_SUCCESS; } else { unlink(OPW_TMPFILE); return PAM_AUTHTOK_ERR; } } PAMH_ARG_DECL(int unix_update_passwd, const char *forwho, const char *towhat) { struct passwd *tmpent = NULL; struct stat st; FILE *pwfile, *opwfile; int err = 1; int oldmask; #ifdef WITH_SELINUX security_context_t prev_context=NULL; #endif oldmask = umask(077); #ifdef WITH_SELINUX if (SELINUX_ENABLED) { security_context_t passwd_context=NULL; if (getfilecon("/etc/passwd",&passwd_context)<0) { return PAM_AUTHTOK_ERR; }; if (getfscreatecon(&prev_context)<0) { freecon(passwd_context); return PAM_AUTHTOK_ERR; } if (setfscreatecon(passwd_context)) { freecon(passwd_context); freecon(prev_context); return PAM_AUTHTOK_ERR; } freecon(passwd_context); } #endif pwfile = fopen(PW_TMPFILE, "w"); umask(oldmask); if (pwfile == NULL) { err = 1; goto done; } opwfile = fopen("/etc/passwd", "r"); if (opwfile == NULL) { fclose(pwfile); err = 1; goto done; } if (fstat(fileno(opwfile), &st) == -1) { fclose(opwfile); fclose(pwfile); err = 1; goto done; } if (fchown(fileno(pwfile), st.st_uid, st.st_gid) == -1) { fclose(opwfile); fclose(pwfile); err = 1; goto done; } if (fchmod(fileno(pwfile), st.st_mode) == -1) { fclose(opwfile); fclose(pwfile); err = 1; goto done; } tmpent = fgetpwent(opwfile); while (tmpent) { if (!strcmp(tmpent->pw_name, forwho)) { /* To shut gcc up */ union { const char *const_charp; char *charp; } assigned_passwd; assigned_passwd.const_charp = towhat; tmpent->pw_passwd = assigned_passwd.charp; err = 0; } if (putpwent(tmpent, pwfile)) { D(("error writing entry to password file: %m")); err = 1; break; } tmpent = fgetpwent(opwfile); } fclose(opwfile); if (fflush(pwfile) || fsync(fileno(pwfile))) { D(("fflush or fsync error writing entries to password file: %m")); err = 1; } if (fclose(pwfile)) { D(("fclose error writing entries to password file: %m")); err = 1; } done: if (!err) { if (!rename(PW_TMPFILE, "/etc/passwd")) pam_syslog(pamh, LOG_NOTICE, "password changed for %s", forwho); else err = 1; } #ifdef WITH_SELINUX if (SELINUX_ENABLED) { if (setfscreatecon(prev_context)) { err = 1; } if (prev_context) freecon(prev_context); prev_context=NULL; } #endif if (!err) { return PAM_SUCCESS; } else { unlink(PW_TMPFILE); return PAM_AUTHTOK_ERR; } } PAMH_ARG_DECL(int unix_update_shadow, const char *forwho, char *towhat) { struct spwd spwdent, *stmpent = NULL; struct stat st; FILE *pwfile, *opwfile; int err = 0; int oldmask; int wroteentry = 0; #ifdef WITH_SELINUX security_context_t prev_context=NULL; #endif oldmask = umask(077); #ifdef WITH_SELINUX if (SELINUX_ENABLED) { security_context_t shadow_context=NULL; if (getfilecon("/etc/shadow",&shadow_context)<0) { return PAM_AUTHTOK_ERR; }; if (getfscreatecon(&prev_context)<0) { freecon(shadow_context); return PAM_AUTHTOK_ERR; } if (setfscreatecon(shadow_context)) { freecon(shadow_context); freecon(prev_context); return PAM_AUTHTOK_ERR; } freecon(shadow_context); } #endif pwfile = fopen(SH_TMPFILE, "w"); umask(oldmask); if (pwfile == NULL) { err = 1; goto done; } opwfile = fopen("/etc/shadow", "r"); if (opwfile == NULL) { fclose(pwfile); err = 1; goto done; } if (fstat(fileno(opwfile), &st) == -1) { fclose(opwfile); fclose(pwfile); err = 1; goto done; } if (fchown(fileno(pwfile), st.st_uid, st.st_gid) == -1) { fclose(opwfile); fclose(pwfile); err = 1; goto done; } if (fchmod(fileno(pwfile), st.st_mode) == -1) { fclose(opwfile); fclose(pwfile); err = 1; goto done; } stmpent = fgetspent(opwfile); while (stmpent) { if (!strcmp(stmpent->sp_namp, forwho)) { stmpent->sp_pwdp = towhat; stmpent->sp_lstchg = time(NULL) / (60 * 60 * 24); if (stmpent->sp_lstchg == 0) stmpent->sp_lstchg = -1; /* Don't request passwort change only because time isn't set yet. */ wroteentry = 1; D(("Set password %s for %s", stmpent->sp_pwdp, forwho)); } if (putspent(stmpent, pwfile)) { D(("error writing entry to shadow file: %m")); err = 1; break; } stmpent = fgetspent(opwfile); } fclose(opwfile); if (!wroteentry && !err) { spwdent.sp_namp = forwho; spwdent.sp_pwdp = towhat; spwdent.sp_lstchg = time(NULL) / (60 * 60 * 24); if (spwdent.sp_lstchg == 0) spwdent.sp_lstchg = -1; /* Don't request passwort change only because time isn't set yet. */ spwdent.sp_min = spwdent.sp_max = spwdent.sp_warn = spwdent.sp_inact = spwdent.sp_expire = -1; spwdent.sp_flag = (unsigned long)-1l; if (putspent(&spwdent, pwfile)) { D(("error writing entry to shadow file: %m")); err = 1; } } if (fflush(pwfile) || fsync(fileno(pwfile))) { D(("fflush or fsync error writing entries to shadow file: %m")); err = 1; } if (fclose(pwfile)) { D(("fclose error writing entries to shadow file: %m")); err = 1; } done: if (!err) { if (!rename(SH_TMPFILE, "/etc/shadow")) pam_syslog(pamh, LOG_NOTICE, "password changed for %s", forwho); else err = 1; } #ifdef WITH_SELINUX if (SELINUX_ENABLED) { if (setfscreatecon(prev_context)) { err = 1; } if (prev_context) freecon(prev_context); prev_context=NULL; } #endif if (!err) { return PAM_SUCCESS; } else { unlink(SH_TMPFILE); return PAM_AUTHTOK_ERR; } } #ifdef HELPER_COMPILE int helper_verify_password(const char *name, const char *p, int nullok) { struct passwd *pwd = NULL; char *salt = NULL; int retval; retval = get_pwd_hash(name, &pwd, &salt); if (pwd == NULL || salt == NULL) { helper_log_err(LOG_WARNING, "check pass; user unknown"); retval = PAM_USER_UNKNOWN; } else { retval = verify_pwd_hash(p, salt, nullok); } if (salt) { _pam_overwrite(salt); _pam_drop(salt); } p = NULL; /* no longer needed here */ return retval; } void helper_log_err(int err, const char *format, ...) { va_list args; va_start(args, format); openlog(HELPER_COMPILE, LOG_CONS | LOG_PID, LOG_AUTHPRIV); vsyslog(err, format, args); va_end(args); closelog(); } static void su_sighandler(int sig) { #ifndef SA_RESETHAND /* emulate the behaviour of the SA_RESETHAND flag */ if ( sig == SIGILL || sig == SIGTRAP || sig == SIGBUS || sig = SIGSERV ) { struct sigaction sa; memset(&sa, '\0', sizeof(sa)); sa.sa_handler = SIG_DFL; sigaction(sig, &sa, NULL); } #endif if (sig > 0) { _exit(sig); } } void setup_signals(void) { struct sigaction action; /* posix signal structure */ /* * Setup signal handlers */ (void) memset((void *) &action, 0, sizeof(action)); action.sa_handler = su_sighandler; #ifdef SA_RESETHAND action.sa_flags = SA_RESETHAND; #endif (void) sigaction(SIGILL, &action, NULL); (void) sigaction(SIGTRAP, &action, NULL); (void) sigaction(SIGBUS, &action, NULL); (void) sigaction(SIGSEGV, &action, NULL); action.sa_handler = SIG_IGN; action.sa_flags = 0; (void) sigaction(SIGTERM, &action, NULL); (void) sigaction(SIGHUP, &action, NULL); (void) sigaction(SIGINT, &action, NULL); (void) sigaction(SIGQUIT, &action, NULL); } char * getuidname(uid_t uid) { struct passwd *pw; static char username[256]; pw = getpwuid(uid); if (pw == NULL) return NULL; strncpy(username, pw->pw_name, sizeof(username)); username[sizeof(username) - 1] = '\0'; return username; } int read_passwords(int fd, int npass, char **passwords) { int rbytes = 0; int offset = 0; int i = 0; char *pptr; while (npass > 0) { rbytes = read(fd, passwords[i]+offset, MAXPASS-offset); if (rbytes < 0) { if (errno == EINTR) continue; break; } if (rbytes == 0) break; while (npass > 0 && (pptr=memchr(passwords[i]+offset, '\0', rbytes)) != NULL) { rbytes -= pptr - (passwords[i]+offset) + 1; i++; offset = 0; npass--; if (rbytes > 0) { if (npass > 0) memcpy(passwords[i], pptr+1, rbytes); memset(pptr+1, '\0', rbytes); } } offset += rbytes; } /* clear up */ if (offset > 0 && npass > 0) { memset(passwords[i], '\0', offset); } return i; } #endif /* ****************************************************************** * * Copyright (c) Jan Rêkorajski 1999. * Copyright (c) Andrew G. Morgan 1996-8. * Copyright (c) Alex O. Yuriev, 1996. * Copyright (c) Cristian Gafton 1996. * Copyright (c) Red Hat, Inc. 1996, 2007, 2008. * * 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. */ Linux-PAM-1.1.8/modules/pam_unix/README.xml0000644000000000000000000000216712160065211015071 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_unix.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_unix-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_unix/md5.c0000644000000000000000000001726312160065211014246 00000000000000/* * $Id$ * * This code implements the MD5 message-digest algorithm. * The algorithm is due to Ron Rivest. This code was * written by Colin Plumb in 1993, no copyright is claimed. * This code is in the public domain; do with it what you wish. * * Equivalent code is available from RSA Data Security, Inc. * This code has been tested against that, and is equivalent, * except that you don't need to include two pages of legalese * with every copy. * * To compute the message digest of a chunk of bytes, declare an * MD5Context structure, pass it to MD5Init, call MD5Update as * needed on buffers full of bytes, and then call MD5Final, which * will fill a supplied 16-byte array with the digest. * */ #include #include "md5.h" #ifndef HIGHFIRST #define byteReverse(buf, len) /* Nothing */ #else static void byteReverse(unsigned char *buf, unsigned longs); #ifndef ASM_MD5 /* * Note: this code is harmless on little-endian machines. */ static void byteReverse(unsigned char *buf, unsigned longs) { uint32 t; do { t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 | ((unsigned) buf[1] << 8 | buf[0]); *(uint32 *) buf = t; buf += 4; } while (--longs); } #endif #endif /* * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious * initialization constants. */ void MD5Name(MD5Init)(struct MD5Context *ctx) { ctx->buf[0] = 0x67452301U; ctx->buf[1] = 0xefcdab89U; ctx->buf[2] = 0x98badcfeU; ctx->buf[3] = 0x10325476U; ctx->bits[0] = 0; ctx->bits[1] = 0; } /* * Update context to reflect the concatenation of another buffer full * of bytes. */ void MD5Name(MD5Update)(struct MD5Context *ctx, unsigned const char *buf, unsigned len) { uint32 t; /* Update bitcount */ t = ctx->bits[0]; if ((ctx->bits[0] = t + ((uint32) len << 3)) < t) ctx->bits[1]++; /* Carry from low to high */ ctx->bits[1] += len >> 29; t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ /* Handle any leading odd-sized chunks */ if (t) { unsigned char *p = (unsigned char *) ctx->in + t; t = 64 - t; if (len < t) { memcpy(p, buf, len); return; } memcpy(p, buf, t); byteReverse(ctx->in, 16); MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in); buf += t; len -= t; } /* Process data in 64-byte chunks */ while (len >= 64) { memcpy(ctx->in, buf, 64); byteReverse(ctx->in, 16); MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in); buf += 64; len -= 64; } /* Handle any remaining bytes of data. */ memcpy(ctx->in, buf, len); } /* * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) */ void MD5Name(MD5Final)(unsigned char digest[16], struct MD5Context *ctx) { unsigned count; unsigned char *p; /* Compute number of bytes mod 64 */ count = (ctx->bits[0] >> 3) & 0x3F; /* Set the first char of padding to 0x80. This is safe since there is always at least one byte free */ p = ctx->in + count; *p++ = 0x80; /* Bytes of padding needed to make 64 bytes */ count = 64 - 1 - count; /* Pad out to 56 mod 64 */ if (count < 8) { /* Two lots of padding: Pad the first block to 64 bytes */ memset(p, 0, count); byteReverse(ctx->in, 16); MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in); /* Now fill the next block with 56 bytes */ memset(ctx->in, 0, 56); } else { /* Pad block to 56 bytes */ memset(p, 0, count - 8); } byteReverse(ctx->in, 14); /* Append length in bits and transform */ memcpy((uint32 *)ctx->in + 14, ctx->bits, 2*sizeof(uint32)); MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4); memcpy(digest, ctx->buf, 16); memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ } #ifndef ASM_MD5 /* The four core functions - F1 is optimized somewhat */ /* #define F1(x, y, z) (x & y | ~x & z) */ #define F1(x, y, z) (z ^ (x & (y ^ z))) #define F2(x, y, z) F1(z, x, y) #define F3(x, y, z) (x ^ y ^ z) #define F4(x, y, z) (y ^ (x | ~z)) /* This is the central step in the MD5 algorithm. */ #define MD5STEP(f, w, x, y, z, data, s) \ ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) /* * The core of the MD5 algorithm, this alters an existing MD5 hash to * reflect the addition of 16 longwords of new data. MD5Update blocks * the data and converts bytes into longwords for this routine. */ void MD5Name(MD5Transform)(uint32 buf[4], uint32 const in[16]) { register uint32 a, b, c, d; a = buf[0]; b = buf[1]; c = buf[2]; d = buf[3]; MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478U, 7); MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756U, 12); MD5STEP(F1, c, d, a, b, in[2] + 0x242070dbU, 17); MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceeeU, 22); MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0fafU, 7); MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62aU, 12); MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613U, 17); MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501U, 22); MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8U, 7); MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7afU, 12); MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1U, 17); MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7beU, 22); MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122U, 7); MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193U, 12); MD5STEP(F1, c, d, a, b, in[14] + 0xa679438eU, 17); MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821U, 22); MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562U, 5); MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340U, 9); MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51U, 14); MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aaU, 20); MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105dU, 5); MD5STEP(F2, d, a, b, c, in[10] + 0x02441453U, 9); MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681U, 14); MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8U, 20); MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6U, 5); MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6U, 9); MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87U, 14); MD5STEP(F2, b, c, d, a, in[8] + 0x455a14edU, 20); MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905U, 5); MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8U, 9); MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9U, 14); MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8aU, 20); MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942U, 4); MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681U, 11); MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122U, 16); MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380cU, 23); MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44U, 4); MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9U, 11); MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60U, 16); MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70U, 23); MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6U, 4); MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127faU, 11); MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085U, 16); MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05U, 23); MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039U, 4); MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5U, 11); MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8U, 16); MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665U, 23); MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244U, 6); MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97U, 10); MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7U, 15); MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039U, 21); MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3U, 6); MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92U, 10); MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47dU, 15); MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1U, 21); MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4fU, 6); MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0U, 10); MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314U, 15); MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1U, 21); MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82U, 6); MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235U, 10); MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bbU, 15); MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391U, 21); buf[0] += a; buf[1] += b; buf[2] += c; buf[3] += d; } #endif Linux-PAM-1.1.8/modules/pam_mail/0000755000000000000000000000000012216542311013426 500000000000000Linux-PAM-1.1.8/modules/pam_mail/Makefile.am0000644000000000000000000000133012160065211015374 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_mail man_MANS = pam_mail.8 XMLS = README.xml pam_mail.8.xml TESTS = tst-pam_mail securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_mail.la pam_mail_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_mail.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_mail/README0000644000000000000000000000373012216527602014237 00000000000000pam_mail — Inform about available mail ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_mail PAM module provides the "you have new mail" service to the user. It can be plugged into any application that has credential or session hooks. It gives a single message indicating the newness of any mail it finds in the user's mail folder. This module also sets the PAM environment variable, MAIL, to the user's mail directory. If the mail spool file (be it /var/mail/$USER or a pathname given with the dir= parameter) is a directory then pam_mail assumes it is in the Maildir format. OPTIONS close Indicate if the user has any mail also on logout. debug Print debug information. dir=maildir Look for the users' mail in an alternative location defined by maildir/ . The default location for mail is /var/mail/. Note, if the supplied maildir is prefixed by a '~', the directory is interpreted as indicating a file in the user's home directory. empty Also print message if user has no mail. hash=count Mail directory hash depth. For example, a hashcount of 2 would make the mail file be /var/spool/mail/u/s/user. noenv Do not set the MAIL environment variable. nopen Don't print any mail information on login. This flag is useful to get the MAIL environment variable set, but to not display any information about it. quiet Only report when there is new mail. standard Old style "You have..." format which doesn't show the mail spool being used. This also implies "empty". EXAMPLES Add the following line to /etc/pam.d/login to indicate that the user has new mail when they login to the system. session optional pam_mail.so standard AUTHOR pam_mail was written by Andrew G. Morgan . Linux-PAM-1.1.8/modules/pam_mail/pam_mail.8.xml0000644000000000000000000001615512160065211016022 00000000000000 pam_mail 8 Linux-PAM Manual pam_mail Inform about available mail pam_mail.so close debug dir=maildir empty hash=count noenv nopen quiet standard DESCRIPTION The pam_mail PAM module provides the "you have new mail" service to the user. It can be plugged into any application that has credential or session hooks. It gives a single message indicating the newness of any mail it finds in the user's mail folder. This module also sets the PAM environment variable, MAIL, to the user's mail directory. If the mail spool file (be it /var/mail/$USER or a pathname given with the parameter) is a directory then pam_mail assumes it is in the Maildir format. OPTIONS Indicate if the user has any mail also on logout. Print debug information. Look for the users' mail in an alternative location defined by maildir/<login>. The default location for mail is /var/mail/<login>. Note, if the supplied maildir is prefixed by a '~', the directory is interpreted as indicating a file in the user's home directory. Also print message if user has no mail. Mail directory hash depth. For example, a hashcount of 2 would make the mail file be /var/spool/mail/u/s/user. Do not set the MAIL environment variable. Don't print any mail information on login. This flag is useful to get the MAIL environment variable set, but to not display any information about it. Only report when there is new mail. Old style "You have..." format which doesn't show the mail spool being used. This also implies "empty". MODULE TYPES PROVIDED The and (on establishment and deletion of credentials) module types are provided. RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_SERVICE_ERR Badly formed arguments. PAM_SUCCESS Success. PAM_USER_UNKNOWN User not known. EXAMPLES Add the following line to /etc/pam.d/login to indicate that the user has new mail when they login to the system. session optional pam_mail.so standard SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_mail was written by Andrew G. Morgan <morgan@kernel.org>. Linux-PAM-1.1.8/modules/pam_mail/tst-pam_mail0000755000000000000000000000006312160065211015657 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_mail.so Linux-PAM-1.1.8/modules/pam_mail/pam_mail.80000644000000000000000000000754012216527602015232 00000000000000'\" t .\" Title: pam_mail .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_MAIL" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_mail \- Inform about available mail .SH "SYNOPSIS" .HP \w'\fBpam_mail\&.so\fR\ 'u \fBpam_mail\&.so\fR [close] [debug] [dir=\fImaildir\fR] [empty] [hash=\fIcount\fR] [noenv] [nopen] [quiet] [standard] .SH "DESCRIPTION" .PP The pam_mail PAM module provides the "you have new mail" service to the user\&. It can be plugged into any application that has credential or session hooks\&. It gives a single message indicating the \fInewness\fR of any mail it finds in the user\*(Aqs mail folder\&. This module also sets the PAM environment variable, \fBMAIL\fR, to the user\*(Aqs mail directory\&. .PP If the mail spool file (be it /var/mail/$USER or a pathname given with the \fBdir=\fR parameter) is a directory then pam_mail assumes it is in the \fIMaildir\fR format\&. .SH "OPTIONS" .PP .PP \fBclose\fR .RS 4 Indicate if the user has any mail also on logout\&. .RE .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBdir=\fR\fB\fImaildir\fR\fR .RS 4 Look for the users\*(Aq mail in an alternative location defined by maildir/\&. The default location for mail is /var/mail/\&. Note, if the supplied maildir is prefixed by a \*(Aq~\*(Aq, the directory is interpreted as indicating a file in the user\*(Aqs home directory\&. .RE .PP \fBempty\fR .RS 4 Also print message if user has no mail\&. .RE .PP \fBhash=\fR\fB\fIcount\fR\fR .RS 4 Mail directory hash depth\&. For example, a \fIhashcount\fR of 2 would make the mail file be /var/spool/mail/u/s/user\&. .RE .PP \fBnoenv\fR .RS 4 Do not set the \fBMAIL\fR environment variable\&. .RE .PP \fBnopen\fR .RS 4 Don\*(Aqt print any mail information on login\&. This flag is useful to get the \fBMAIL\fR environment variable set, but to not display any information about it\&. .RE .PP \fBquiet\fR .RS 4 Only report when there is new mail\&. .RE .PP \fBstandard\fR .RS 4 Old style "You have\&.\&.\&." format which doesn\*(Aqt show the mail spool being used\&. This also implies "empty"\&. .RE .SH "MODULE TYPES PROVIDED" .PP The \fBsession\fR and \fBauth\fR (on establishment and deletion of credentials) module types are provided\&. .SH "RETURN VALUES" .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_SERVICE_ERR .RS 4 Badly formed arguments\&. .RE .PP PAM_SUCCESS .RS 4 Success\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known\&. .RE .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/login to indicate that the user has new mail when they login to the system\&. .sp .if n \{\ .RS 4 .\} .nf session optional pam_mail\&.so standard .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_mail was written by Andrew G\&. Morgan \&. Linux-PAM-1.1.8/modules/pam_mail/Makefile.in0000644000000000000000000006004312216527536015432 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_mail DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_mail_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_mail_la_SOURCES = pam_mail.c pam_mail_la_OBJECTS = pam_mail.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_mail.c DIST_SOURCES = pam_mail.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_mail man_MANS = pam_mail.8 XMLS = README.xml pam_mail.8.xml TESTS = tst-pam_mail securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_mail.la pam_mail_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_mail/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_mail/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_mail.la: $(pam_mail_la_OBJECTS) $(pam_mail_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_mail_la_OBJECTS) $(pam_mail_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_mail.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_mail.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_mail/pam_mail.c0000644000000000000000000002701112160065211015267 00000000000000/* pam_mail module */ /* * Written by Andrew Morgan 1996/3/11 * $HOME additions by David Kinchlea 1997/1/7 * mailhash additions by Chris Adams 1998/7/11 */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_PATHS_H #include #endif #define DEFAULT_MAIL_DIRECTORY PAM_PATH_MAILDIR #define MAIL_FILE_FORMAT "%s%s/%s" #define MAIL_ENV_NAME "MAIL" #define MAIL_ENV_FORMAT MAIL_ENV_NAME "=%s" /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #define PAM_SM_SESSION #define PAM_SM_AUTH #include #include #include #include /* argument parsing */ #define PAM_DEBUG_ARG 0x0001 #define PAM_NO_LOGIN 0x0002 #define PAM_LOGOUT_TOO 0x0004 #define PAM_NEW_MAIL_DIR 0x0010 #define PAM_MAIL_SILENT 0x0020 #define PAM_NO_ENV 0x0040 #define PAM_HOME_MAIL 0x0100 #define PAM_EMPTY_TOO 0x0200 #define PAM_STANDARD_MAIL 0x0400 #define PAM_QUIET_MAIL 0x1000 #define HAVE_NEW_MAIL 0x1 #define HAVE_OLD_MAIL 0x2 #define HAVE_NO_MAIL 0x3 #define HAVE_MAIL 0x4 static int _pam_parse (const pam_handle_t *pamh, int flags, int argc, const char **argv, const char **maildir, size_t *hashcount) { int ctrl=0; if (flags & PAM_SILENT) { ctrl |= PAM_MAIL_SILENT; } *hashcount = 0; /* step through arguments */ for (; argc-- > 0; ++argv) { /* generic options */ if (!strcmp(*argv,"debug")) ctrl |= PAM_DEBUG_ARG; else if (!strcmp(*argv,"quiet")) ctrl |= PAM_QUIET_MAIL; else if (!strcmp(*argv,"standard")) ctrl |= PAM_STANDARD_MAIL | PAM_EMPTY_TOO; else if (!strncmp(*argv,"dir=",4)) { *maildir = 4 + *argv; if (**maildir != '\0') { D(("new mail directory: %s", *maildir)); ctrl |= PAM_NEW_MAIL_DIR; } else { pam_syslog(pamh, LOG_ERR, "dir= specification missing argument - ignored"); } } else if (!strncmp(*argv,"hash=",5)) { char *ep = NULL; *hashcount = strtoul(*argv+5,&ep,10); if (!ep) { *hashcount = 0; } } else if (!strcmp(*argv,"close")) { ctrl |= PAM_LOGOUT_TOO; } else if (!strcmp(*argv,"nopen")) { ctrl |= PAM_NO_LOGIN; } else if (!strcmp(*argv,"noenv")) { ctrl |= PAM_NO_ENV; } else if (!strcmp(*argv,"empty")) { ctrl |= PAM_EMPTY_TOO; } else { pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } } if ((*hashcount != 0) && !(ctrl & PAM_NEW_MAIL_DIR)) { *maildir = DEFAULT_MAIL_DIRECTORY; ctrl |= PAM_NEW_MAIL_DIR; } return ctrl; } static int get_folder(pam_handle_t *pamh, int ctrl, const char *path_mail, char **folder_p, size_t hashcount, const struct passwd *pwd) { int retval; const char *path; char *folder = NULL; if (ctrl & PAM_NEW_MAIL_DIR) { path = path_mail; if (*path == '~') { /* support for $HOME delivery */ /* * "~/xxx" and "~xxx" are treated as same */ if (!*++path || (*path == '/' && !*++path)) { pam_syslog(pamh, LOG_ERR, "badly formed mail path [%s]", path_mail); retval = PAM_SERVICE_ERR; goto get_folder_cleanup; } ctrl |= PAM_HOME_MAIL; if (hashcount != 0) { pam_syslog(pamh, LOG_ERR, "cannot do hash= and home directory mail"); } } } else { path = DEFAULT_MAIL_DIRECTORY; } /* put folder together */ hashcount = hashcount < strlen(pwd->pw_name) ? hashcount : strlen(pwd->pw_name); retval = PAM_BUF_ERR; if (ctrl & PAM_HOME_MAIL) { if (asprintf(&folder, MAIL_FILE_FORMAT, pwd->pw_dir, "", path) < 0) goto get_folder_cleanup; } else { int rc; size_t i; char *hash; if ((hash = malloc(2 * hashcount + 1)) == NULL) goto get_folder_cleanup; for (i = 0; i < hashcount; i++) { hash[2 * i] = '/'; hash[2 * i + 1] = pwd->pw_name[i]; } hash[2 * i] = '\0'; rc = asprintf(&folder, MAIL_FILE_FORMAT, path, hash, pwd->pw_name); _pam_overwrite(hash); _pam_drop(hash); if (rc < 0) goto get_folder_cleanup; } D(("folder=[%s]", folder)); retval = PAM_SUCCESS; /* tidy up */ get_folder_cleanup: path = NULL; *folder_p = folder; folder = NULL; if (retval == PAM_BUF_ERR) pam_syslog(pamh, LOG_CRIT, "out of memory for mail folder"); return retval; } static int get_mail_status(pam_handle_t *pamh, int ctrl, const char *folder) { int type = 0; struct stat mail_st; if (stat(folder, &mail_st) < 0) return 0; if (S_ISDIR(mail_st.st_mode)) { /* Assume Maildir format */ int i, save_errno; char *dir; struct dirent **namelist; if (asprintf(&dir, "%s/new", folder) < 0) { pam_syslog(pamh, LOG_CRIT, "out of memory"); goto get_mail_status_cleanup; } i = scandir(dir, &namelist, 0, alphasort); save_errno = errno; _pam_overwrite(dir); _pam_drop(dir); if (i < 0) { type = 0; namelist = NULL; if (save_errno == ENOMEM) { pam_syslog(pamh, LOG_CRIT, "out of memory"); goto get_mail_status_cleanup; } } type = (i > 2) ? HAVE_NEW_MAIL : 0; while (--i >= 0) _pam_drop(namelist[i]); _pam_drop(namelist); if (type == 0) { if (asprintf(&dir, "%s/cur", folder) < 0) { pam_syslog(pamh, LOG_CRIT, "out of memory"); goto get_mail_status_cleanup; } i = scandir(dir, &namelist, 0, alphasort); save_errno = errno; _pam_overwrite(dir); _pam_drop(dir); if (i < 0) { type = 0; namelist = NULL; if (save_errno == ENOMEM) { pam_syslog(pamh, LOG_CRIT, "out of memory"); goto get_mail_status_cleanup; } } if (i > 2) type = HAVE_OLD_MAIL; else type = (ctrl & PAM_EMPTY_TOO) ? HAVE_NO_MAIL : 0; while (--i >= 0) _pam_drop(namelist[i]); _pam_drop(namelist); } } else { if (mail_st.st_size > 0) { if (mail_st.st_atime < mail_st.st_mtime) /* new */ type = HAVE_NEW_MAIL; else /* old */ type = (ctrl & PAM_STANDARD_MAIL) ? HAVE_MAIL : HAVE_OLD_MAIL; } else if (ctrl & PAM_EMPTY_TOO) { type = HAVE_NO_MAIL; } else { type = 0; } } get_mail_status_cleanup: memset(&mail_st, 0, sizeof(mail_st)); D(("user has %d mail in %s folder", type, folder)); return type; } static int report_mail(pam_handle_t *pamh, int ctrl, int type, const char *folder) { int retval; if ((ctrl & PAM_MAIL_SILENT) || ((ctrl & PAM_QUIET_MAIL) && type != HAVE_NEW_MAIL)) { D(("keeping quiet")); retval = PAM_SUCCESS; } else { if (ctrl & PAM_STANDARD_MAIL) switch (type) { case HAVE_NO_MAIL: retval = pam_info (pamh, "%s", _("No mail.")); break; case HAVE_NEW_MAIL: retval = pam_info (pamh, "%s", _("You have new mail.")); break; case HAVE_OLD_MAIL: retval = pam_info (pamh, "%s", _("You have old mail.")); break; case HAVE_MAIL: default: retval = pam_info (pamh, "%s", _("You have mail.")); break; } else switch (type) { case HAVE_NO_MAIL: retval = pam_info (pamh, _("You have no mail in folder %s."), folder); break; case HAVE_NEW_MAIL: retval = pam_info (pamh, _("You have new mail in folder %s."), folder); break; case HAVE_OLD_MAIL: retval = pam_info (pamh, _("You have old mail in folder %s."), folder); break; case HAVE_MAIL: default: retval = pam_info (pamh, _("You have mail in folder %s."), folder); break; } } D(("returning %s", pam_strerror(pamh, retval))); return retval; } static int _do_mail(pam_handle_t *, int, int, const char **, int); /* --- authentication functions --- */ PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_IGNORE; } /* Checking mail as part of authentication */ PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) { if (!(flags & (PAM_ESTABLISH_CRED|PAM_DELETE_CRED))) return PAM_IGNORE; return _do_mail(pamh,flags,argc,argv,(flags & PAM_ESTABLISH_CRED)); } /* --- session management functions --- */ PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh,int flags,int argc ,const char **argv) { return _do_mail(pamh,flags,argc,argv,0); } /* Checking mail as part of the session management */ PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) { return _do_mail(pamh,flags,argc,argv,1); } /* --- The Beaf (Tm) --- */ static int _do_mail(pam_handle_t *pamh, int flags, int argc, const char **argv, int est) { int retval, ctrl, type; size_t hashcount; char *folder = NULL; const char *user; const char *path_mail = NULL; const struct passwd *pwd = NULL; /* * this module (un)sets the MAIL environment variable, and checks if * the user has any new mail. */ ctrl = _pam_parse(pamh, flags, argc, argv, &path_mail, &hashcount); retval = pam_get_user(pamh, &user, NULL); if (retval != PAM_SUCCESS || user == NULL) { pam_syslog(pamh, LOG_ERR, "cannot determine username"); return PAM_USER_UNKNOWN; } pwd = pam_modutil_getpwnam (pamh, user); if (pwd == NULL) { pam_syslog(pamh, LOG_ERR, "user unknown"); return PAM_USER_UNKNOWN; } /* which folder? */ retval = get_folder(pamh, ctrl, path_mail, &folder, hashcount, pwd); if (retval != PAM_SUCCESS) { D(("failed to find folder")); return retval; } /* set the MAIL variable? */ if (!(ctrl & PAM_NO_ENV) && est) { char *tmp; if (asprintf(&tmp, MAIL_ENV_FORMAT, folder) < 0) { pam_syslog(pamh, LOG_CRIT, "no memory for " MAIL_ENV_NAME " variable"); retval = PAM_BUF_ERR; goto do_mail_cleanup; } D(("setting env: %s", tmp)); retval = pam_putenv(pamh, tmp); _pam_overwrite(tmp); _pam_drop(tmp); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_CRIT, "unable to set " MAIL_ENV_NAME " variable"); retval = PAM_BUF_ERR; goto do_mail_cleanup; } } else { D(("not setting " MAIL_ENV_NAME " variable")); } /* * OK. we've got the mail folder... what about its status? */ if ((est && !(ctrl & PAM_NO_LOGIN)) || (!est && (ctrl & PAM_LOGOUT_TOO))) { PAM_MODUTIL_DEF_PRIVS(privs); if (pam_modutil_drop_priv(pamh, &privs, pwd)) { retval = PAM_SESSION_ERR; goto do_mail_cleanup; } else { type = get_mail_status(pamh, ctrl, folder); if (pam_modutil_regain_priv(pamh, &privs)) { retval = PAM_SESSION_ERR; goto do_mail_cleanup; } } if (type != 0) { retval = report_mail(pamh, ctrl, type, folder); type = 0; } } /* Delete environment variable? */ if ( ! est && ! (ctrl & PAM_NO_ENV) ) (void) pam_putenv(pamh, MAIL_ENV_NAME); do_mail_cleanup: _pam_overwrite(folder); _pam_drop(folder); /* indicate success or failure */ return retval; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_mail_modstruct = { "pam_mail", pam_sm_authenticate, pam_sm_setcred, NULL, pam_sm_open_session, pam_sm_close_session, NULL, }; #endif /* end of module definition */ Linux-PAM-1.1.8/modules/pam_mail/README.xml0000644000000000000000000000216712160065211015030 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_mail.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_mail-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_lastlog/0000755000000000000000000000000012216542311014151 500000000000000Linux-PAM-1.1.8/modules/pam_lastlog/tst-pam_lastlog0000755000000000000000000000006612160065211017130 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_lastlog.so Linux-PAM-1.1.8/modules/pam_lastlog/Makefile.am0000644000000000000000000000136412160065211016126 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_lastlog man_MANS = pam_lastlog.8 XMLS = README.xml pam_lastlog.8.xml TESTS = tst-pam_lastlog AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_lastlog.la pam_lastlog_la_LIBADD = $(top_builddir)/libpam/libpam.la -lutil if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_lastlog.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_lastlog/pam_lastlog.8.xml0000644000000000000000000002025212160065211017261 00000000000000 pam_lastlog 8 Linux-PAM Manual pam_lastlog PAM module to display date of last login and perform inactive account lock out pam_lastlog.so debug silent never nodate nohost noterm nowtmp noupdate showfailed inactive=<days> DESCRIPTION pam_lastlog is a PAM module to display a line of information about the last login of the user. In addition, the module maintains the /var/log/lastlog file. Some applications may perform this function themselves. In such cases, this module is not necessary. If the module is called in the auth or account phase, the accounts that were not used recently enough will be disallowed to log in. The check is not performed for the root account so the root is never locked out. OPTIONS Print debug information. Don't inform the user about any previous login, just update the /var/log/lastlog file. If the /var/log/lastlog file does not contain any old entries for the user, indicate that the user has never previously logged in with a welcome message. Don't display the date of the last login. Don't display the terminal name on which the last login was attempted. Don't indicate from which host the last login was attempted. Don't update the wtmp entry. Don't update any file. Display number of failed login attempts and the date of the last failed attempt from btmp. The date is not displayed when is specified. This option is specific for the auth or account phase. It specifies the number of days after the last login of the user when the user will be locked out by the module. The default value is 90. MODULE TYPES PROVIDED The and module type allows to lock out users which did not login recently enough. The module type is provided for displaying the information about the last login and/or updating the lastlog and wtmp files. RETURN VALUES PAM_SUCCESS Everything was successful. PAM_SERVICE_ERR Internal service module error. PAM_USER_UNKNOWN User not known. PAM_AUTH_ERR User locked out in the auth or account phase due to inactivity. PAM_IGNORE There was an error during reading the lastlog file in the auth or account phase and thus inactivity of the user cannot be determined. EXAMPLES Add the following line to /etc/pam.d/login to display the last login time of an user: session required pam_lastlog.so nowtmp To reject the user if he did not login during the previous 50 days the following line can be used: auth required pam_lastlog.so inactive=50 FILES /var/log/lastlog Lastlog logging file SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_lastlog was written by Andrew G. Morgan <morgan@kernel.org>. Inactive account lock out added by Tomáš Mráz <tm@t8m.info>. Linux-PAM-1.1.8/modules/pam_lastlog/README0000644000000000000000000000432212216527577014773 00000000000000pam_lastlog — PAM module to display date of last login and perform inactive account lock out ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_lastlog is a PAM module to display a line of information about the last login of the user. In addition, the module maintains the /var/log/lastlog file. Some applications may perform this function themselves. In such cases, this module is not necessary. If the module is called in the auth or account phase, the accounts that were not used recently enough will be disallowed to log in. The check is not performed for the root account so the root is never locked out. OPTIONS debug Print debug information. silent Don't inform the user about any previous login, just update the /var/log/ lastlog file. never If the /var/log/lastlog file does not contain any old entries for the user, indicate that the user has never previously logged in with a welcome message. nodate Don't display the date of the last login. noterm Don't display the terminal name on which the last login was attempted. nohost Don't indicate from which host the last login was attempted. nowtmp Don't update the wtmp entry. noupdate Don't update any file. showfailed Display number of failed login attempts and the date of the last failed attempt from btmp. The date is not displayed when nodate is specified. inactive= This option is specific for the auth or account phase. It specifies the number of days after the last login of the user when the user will be locked out by the module. The default value is 90. EXAMPLES Add the following line to /etc/pam.d/login to display the last login time of an user: session required pam_lastlog.so nowtmp To reject the user if he did not login during the previous 50 days the following line can be used: auth required pam_lastlog.so inactive=50 AUTHOR pam_lastlog was written by Andrew G. Morgan . Inactive account lock out added by Tomáš Mráz . Linux-PAM-1.1.8/modules/pam_lastlog/pam_lastlog.80000644000000000000000000001104112216527600016465 00000000000000'\" t .\" Title: pam_lastlog .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_LASTLOG" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_lastlog \- PAM module to display date of last login and perform inactive account lock out .SH "SYNOPSIS" .HP \w'\fBpam_lastlog\&.so\fR\ 'u \fBpam_lastlog\&.so\fR [debug] [silent] [never] [nodate] [nohost] [noterm] [nowtmp] [noupdate] [showfailed] [inactive=] .SH "DESCRIPTION" .PP pam_lastlog is a PAM module to display a line of information about the last login of the user\&. In addition, the module maintains the /var/log/lastlog file\&. .PP Some applications may perform this function themselves\&. In such cases, this module is not necessary\&. .PP If the module is called in the auth or account phase, the accounts that were not used recently enough will be disallowed to log in\&. The check is not performed for the root account so the root is never locked out\&. .SH "OPTIONS" .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBsilent\fR .RS 4 Don\*(Aqt inform the user about any previous login, just update the /var/log/lastlog file\&. .RE .PP \fBnever\fR .RS 4 If the /var/log/lastlog file does not contain any old entries for the user, indicate that the user has never previously logged in with a welcome message\&. .RE .PP \fBnodate\fR .RS 4 Don\*(Aqt display the date of the last login\&. .RE .PP \fBnoterm\fR .RS 4 Don\*(Aqt display the terminal name on which the last login was attempted\&. .RE .PP \fBnohost\fR .RS 4 Don\*(Aqt indicate from which host the last login was attempted\&. .RE .PP \fBnowtmp\fR .RS 4 Don\*(Aqt update the wtmp entry\&. .RE .PP \fBnoupdate\fR .RS 4 Don\*(Aqt update any file\&. .RE .PP \fBshowfailed\fR .RS 4 Display number of failed login attempts and the date of the last failed attempt from btmp\&. The date is not displayed when \fBnodate\fR is specified\&. .RE .PP \fBinactive=\fR .RS 4 This option is specific for the auth or account phase\&. It specifies the number of days after the last login of the user when the user will be locked out by the module\&. The default value is 90\&. .RE .SH "MODULE TYPES PROVIDED" .PP The \fBauth\fR and \fBaccount\fR module type allows to lock out users which did not login recently enough\&. The \fBsession\fR module type is provided for displaying the information about the last login and/or updating the lastlog and wtmp files\&. .SH "RETURN VALUES" .PP .PP PAM_SUCCESS .RS 4 Everything was successful\&. .RE .PP PAM_SERVICE_ERR .RS 4 Internal service module error\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known\&. .RE .PP PAM_AUTH_ERR .RS 4 User locked out in the auth or account phase due to inactivity\&. .RE .PP PAM_IGNORE .RS 4 There was an error during reading the lastlog file in the auth or account phase and thus inactivity of the user cannot be determined\&. .RE .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/login to display the last login time of an user: .sp .if n \{\ .RS 4 .\} .nf session required pam_lastlog\&.so nowtmp .fi .if n \{\ .RE .\} .PP To reject the user if he did not login during the previous 50 days the following line can be used: .sp .if n \{\ .RS 4 .\} .nf auth required pam_lastlog\&.so inactive=50 .fi .if n \{\ .RE .\} .SH "FILES" .PP /var/log/lastlog .RS 4 Lastlog logging file .RE .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_lastlog was written by Andrew G\&. Morgan \&. .PP Inactive account lock out added by Tomáš Mráz \&. Linux-PAM-1.1.8/modules/pam_lastlog/Makefile.in0000644000000000000000000006015712216527536016163 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_lastlog DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_lastlog_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_lastlog_la_SOURCES = pam_lastlog.c pam_lastlog_la_OBJECTS = pam_lastlog.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_lastlog.c DIST_SOURCES = pam_lastlog.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_lastlog man_MANS = pam_lastlog.8 XMLS = README.xml pam_lastlog.8.xml TESTS = tst-pam_lastlog AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_lastlog.la pam_lastlog_la_LIBADD = $(top_builddir)/libpam/libpam.la -lutil @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_lastlog/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_lastlog/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_lastlog.la: $(pam_lastlog_la_OBJECTS) $(pam_lastlog_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_lastlog_la_OBJECTS) $(pam_lastlog_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_lastlog.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_lastlog.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_lastlog/README.xml0000644000000000000000000000223012160065211015542 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_lastlog.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_lastlog-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_lastlog/pam_lastlog.c0000644000000000000000000004644312160065211016547 00000000000000/* pam_lastlog module */ /* * Written by Andrew Morgan 1996/3/11 * * This module does the necessary work to display the last login * time+date for this user, it then updates this entry for the * present (login) service. */ #include "config.h" #include #include #include #ifdef HAVE_UTMP_H # include #else # include #endif #include #include #include #include #include #include #include #include #if defined(hpux) || defined(sunos) || defined(solaris) # ifndef _PATH_LASTLOG # define _PATH_LASTLOG "/usr/adm/lastlog" # endif /* _PATH_LASTLOG */ # ifndef UT_HOSTSIZE # define UT_HOSTSIZE 16 # endif /* UT_HOSTSIZE */ # ifndef UT_LINESIZE # define UT_LINESIZE 12 # endif /* UT_LINESIZE */ #endif #if defined(hpux) struct lastlog { time_t ll_time; char ll_line[UT_LINESIZE]; char ll_host[UT_HOSTSIZE]; /* same as in utmp */ }; #endif /* hpux */ #ifndef _PATH_BTMP # define _PATH_BTMP "/var/log/btmp" #endif /* XXX - time before ignoring lock. Is 1 sec enough? */ #define LASTLOG_IGNORE_LOCK_TIME 1 #define DEFAULT_HOST "" /* "[no.where]" */ #define DEFAULT_TERM "" /* "tt???" */ #define DEFAULT_INACTIVE_DAYS 90 #define MAX_INACTIVE_DAYS 100000 /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #define PAM_SM_SESSION #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #include #include #include #include /* argument parsing */ #define LASTLOG_DATE 01 /* display the date of the last login */ #define LASTLOG_HOST 02 /* display the last host used (if set) */ #define LASTLOG_LINE 04 /* display the last terminal used */ #define LASTLOG_NEVER 010 /* display a welcome message for first login */ #define LASTLOG_DEBUG 020 /* send info to syslog(3) */ #define LASTLOG_QUIET 040 /* keep quiet about things */ #define LASTLOG_WTMP 0100 /* log to wtmp as well as lastlog */ #define LASTLOG_BTMP 0200 /* display failed login info from btmp */ #define LASTLOG_UPDATE 0400 /* update the lastlog and wtmp files (default) */ static int _pam_auth_parse(pam_handle_t *pamh, int flags, int argc, const char **argv, time_t *inactive) { int ctrl = 0; *inactive = DEFAULT_INACTIVE_DAYS; /* does the appliction require quiet? */ if (flags & PAM_SILENT) { ctrl |= LASTLOG_QUIET; } /* step through arguments */ for (; argc-- > 0; ++argv) { char *ep = NULL; long l; if (!strcmp(*argv,"debug")) { ctrl |= LASTLOG_DEBUG; } else if (!strcmp(*argv,"silent")) { ctrl |= LASTLOG_QUIET; } else if (!strncmp(*argv,"inactive=", 9)) { l = strtol(*argv+9, &ep, 10); if (ep != *argv+9 && l > 0 && l < MAX_INACTIVE_DAYS) *inactive = l; else { pam_syslog(pamh, LOG_ERR, "bad option value: %s", *argv); } } else { pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } } D(("ctrl = %o", ctrl)); return ctrl; } static int _pam_session_parse(pam_handle_t *pamh, int flags, int argc, const char **argv) { int ctrl=(LASTLOG_DATE|LASTLOG_HOST|LASTLOG_LINE|LASTLOG_WTMP|LASTLOG_UPDATE); /* does the appliction require quiet? */ if (flags & PAM_SILENT) { ctrl |= LASTLOG_QUIET; } /* step through arguments */ for (; argc-- > 0; ++argv) { /* generic options */ if (!strcmp(*argv,"debug")) { ctrl |= LASTLOG_DEBUG; } else if (!strcmp(*argv,"nodate")) { ctrl &= ~LASTLOG_DATE; } else if (!strcmp(*argv,"noterm")) { ctrl &= ~LASTLOG_LINE; } else if (!strcmp(*argv,"nohost")) { ctrl &= ~LASTLOG_HOST; } else if (!strcmp(*argv,"silent")) { ctrl |= LASTLOG_QUIET; } else if (!strcmp(*argv,"never")) { ctrl |= LASTLOG_NEVER; } else if (!strcmp(*argv,"nowtmp")) { ctrl &= ~LASTLOG_WTMP; } else if (!strcmp(*argv,"noupdate")) { ctrl &= ~(LASTLOG_WTMP|LASTLOG_UPDATE); } else if (!strcmp(*argv,"showfailed")) { ctrl |= LASTLOG_BTMP; } else { pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } } D(("ctrl = %o", ctrl)); return ctrl; } static const char * get_tty(pam_handle_t *pamh) { const void *void_terminal_line = NULL; const char *terminal_line; if (pam_get_item(pamh, PAM_TTY, &void_terminal_line) != PAM_SUCCESS || void_terminal_line == NULL) { terminal_line = DEFAULT_TERM; } else { terminal_line = void_terminal_line; } if (!strncmp("/dev/", terminal_line, 5)) { /* strip leading "/dev/" from tty. */ terminal_line += 5; } D(("terminal = %s", terminal_line)); return terminal_line; } static int last_login_open(pam_handle_t *pamh, int announce, uid_t uid) { int last_fd; /* obtain the last login date and all the relevant info */ last_fd = open(_PATH_LASTLOG, announce&LASTLOG_UPDATE ? O_RDWR : O_RDONLY); if (last_fd < 0) { if (errno == ENOENT && (announce & LASTLOG_UPDATE)) { last_fd = open(_PATH_LASTLOG, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); if (last_fd < 0) { pam_syslog(pamh, LOG_ERR, "unable to create %s: %m", _PATH_LASTLOG); D(("unable to create %s file", _PATH_LASTLOG)); return -1; } pam_syslog(pamh, LOG_WARNING, "file %s created", _PATH_LASTLOG); D(("file %s created", _PATH_LASTLOG)); } else { pam_syslog(pamh, LOG_ERR, "unable to open %s: %m", _PATH_LASTLOG); D(("unable to open %s file", _PATH_LASTLOG)); return -1; } } if (lseek(last_fd, sizeof(struct lastlog) * (off_t) uid, SEEK_SET) < 0) { pam_syslog(pamh, LOG_ERR, "failed to lseek %s: %m", _PATH_LASTLOG); D(("unable to lseek %s file", _PATH_LASTLOG)); close(last_fd); return -1; } return last_fd; } static int last_login_read(pam_handle_t *pamh, int announce, int last_fd, uid_t uid, time_t *lltime) { struct flock last_lock; struct lastlog last_login; int retval = PAM_SUCCESS; char the_time[256]; char *date = NULL; char *host = NULL; char *line = NULL; memset(&last_lock, 0, sizeof(last_lock)); last_lock.l_type = F_RDLCK; last_lock.l_whence = SEEK_SET; last_lock.l_start = sizeof(last_login) * (off_t) uid; last_lock.l_len = sizeof(last_login); if (fcntl(last_fd, F_SETLK, &last_lock) < 0) { D(("locking %s failed..(waiting a little)", _PATH_LASTLOG)); pam_syslog(pamh, LOG_WARNING, "file %s is locked/read", _PATH_LASTLOG); sleep(LASTLOG_IGNORE_LOCK_TIME); } if (pam_modutil_read(last_fd, (char *) &last_login, sizeof(last_login)) != sizeof(last_login)) { memset(&last_login, 0, sizeof(last_login)); } last_lock.l_type = F_UNLCK; (void) fcntl(last_fd, F_SETLK, &last_lock); /* unlock */ *lltime = last_login.ll_time; if (!last_login.ll_time) { if (announce & LASTLOG_DEBUG) { pam_syslog(pamh, LOG_DEBUG, "first login for user with uid %lu", (unsigned long int)uid); } } if (!(announce & LASTLOG_QUIET)) { if (last_login.ll_time) { /* we want the date? */ if (announce & LASTLOG_DATE) { struct tm *tm, tm_buf; time_t ll_time; ll_time = last_login.ll_time; tm = localtime_r (&ll_time, &tm_buf); strftime (the_time, sizeof (the_time), /* TRANSLATORS: "strftime options for date of last login" */ _(" %a %b %e %H:%M:%S %Z %Y"), tm); date = the_time; } /* we want & have the host? */ if ((announce & LASTLOG_HOST) && (last_login.ll_host[0] != '\0')) { /* TRANSLATORS: " from " */ if (asprintf(&host, _(" from %.*s"), UT_HOSTSIZE, last_login.ll_host) < 0) { pam_syslog(pamh, LOG_ERR, "out of memory"); retval = PAM_BUF_ERR; goto cleanup; } } /* we want and have the terminal? */ if ((announce & LASTLOG_LINE) && (last_login.ll_line[0] != '\0')) { /* TRANSLATORS: " on " */ if (asprintf(&line, _(" on %.*s"), UT_LINESIZE, last_login.ll_line) < 0) { pam_syslog(pamh, LOG_ERR, "out of memory"); retval = PAM_BUF_ERR; goto cleanup; } } if (date != NULL || host != NULL || line != NULL) /* TRANSLATORS: "Last login: from on " */ retval = pam_info(pamh, _("Last login:%s%s%s"), date ? date : "", host ? host : "", line ? line : ""); } else if (announce & LASTLOG_NEVER) { D(("this is the first time this user has logged in")); retval = pam_info(pamh, "%s", _("Welcome to your new account!")); } } /* cleanup */ cleanup: memset(&last_login, 0, sizeof(last_login)); _pam_overwrite(date); _pam_overwrite(host); _pam_drop(host); _pam_overwrite(line); _pam_drop(line); return retval; } static int last_login_write(pam_handle_t *pamh, int announce, int last_fd, uid_t uid, const char *user) { struct flock last_lock; struct lastlog last_login; time_t ll_time; const void *void_remote_host = NULL; const char *remote_host; const char *terminal_line; int retval = PAM_SUCCESS; /* rewind */ if (lseek(last_fd, sizeof(last_login) * (off_t) uid, SEEK_SET) < 0) { pam_syslog(pamh, LOG_ERR, "failed to lseek %s: %m", _PATH_LASTLOG); return PAM_SERVICE_ERR; } /* set this login date */ D(("set the most recent login time")); (void) time(&ll_time); /* set the time */ last_login.ll_time = ll_time; /* set the remote host */ if (pam_get_item(pamh, PAM_RHOST, &void_remote_host) != PAM_SUCCESS || void_remote_host == NULL) { remote_host = DEFAULT_HOST; } else { remote_host = void_remote_host; } /* copy to last_login */ last_login.ll_host[0] = '\0'; strncat(last_login.ll_host, remote_host, sizeof(last_login.ll_host)-1); /* set the terminal line */ terminal_line = get_tty(pamh); /* copy to last_login */ last_login.ll_line[0] = '\0'; strncat(last_login.ll_line, terminal_line, sizeof(last_login.ll_line)-1); terminal_line = NULL; D(("locking lastlog file")); /* now we try to lock this file-record exclusively; non-blocking */ memset(&last_lock, 0, sizeof(last_lock)); last_lock.l_type = F_WRLCK; last_lock.l_whence = SEEK_SET; last_lock.l_start = sizeof(last_login) * (off_t) uid; last_lock.l_len = sizeof(last_login); if (fcntl(last_fd, F_SETLK, &last_lock) < 0) { D(("locking %s failed..(waiting a little)", _PATH_LASTLOG)); pam_syslog(pamh, LOG_WARNING, "file %s is locked/write", _PATH_LASTLOG); sleep(LASTLOG_IGNORE_LOCK_TIME); } D(("writing to the lastlog file")); if (pam_modutil_write (last_fd, (char *) &last_login, sizeof (last_login)) != sizeof(last_login)) { pam_syslog(pamh, LOG_ERR, "failed to write %s: %m", _PATH_LASTLOG); retval = PAM_SERVICE_ERR; } last_lock.l_type = F_UNLCK; (void) fcntl(last_fd, F_SETLK, &last_lock); /* unlock */ D(("unlocked")); if (announce & LASTLOG_WTMP) { /* write wtmp entry for user */ logwtmp(last_login.ll_line, user, remote_host); } /* cleanup */ memset(&last_login, 0, sizeof(last_login)); return retval; } static int last_login_date(pam_handle_t *pamh, int announce, uid_t uid, const char *user, time_t *lltime) { int retval; int last_fd; /* obtain the last login date and all the relevant info */ last_fd = last_login_open(pamh, announce, uid); if (last_fd < 0) { return PAM_SERVICE_ERR; } retval = last_login_read(pamh, announce, last_fd, uid, lltime); if (retval != PAM_SUCCESS) { close(last_fd); D(("error while reading lastlog file")); return retval; } if (announce & LASTLOG_UPDATE) { retval = last_login_write(pamh, announce, last_fd, uid, user); } close(last_fd); D(("all done with last login")); return retval; } static int last_login_failed(pam_handle_t *pamh, int announce, const char *user, time_t lltime) { int retval; int fd; struct utmp ut; struct utmp utuser; int failed = 0; char the_time[256]; char *date = NULL; char *host = NULL; char *line = NULL; if (strlen(user) > UT_NAMESIZE) { pam_syslog(pamh, LOG_WARNING, "username too long, output might be inaccurate"); } /* obtain the failed login attempt records from btmp */ fd = open(_PATH_BTMP, O_RDONLY); if (fd < 0) { int save_errno = errno; pam_syslog(pamh, LOG_ERR, "unable to open %s: %m", _PATH_BTMP); D(("unable to open %s file", _PATH_BTMP)); if (save_errno == ENOENT) return PAM_SUCCESS; else return PAM_SERVICE_ERR; } while ((retval=pam_modutil_read(fd, (void *)&ut, sizeof(ut))) == sizeof(ut)) { if (ut.ut_tv.tv_sec >= lltime && strncmp(ut.ut_user, user, UT_NAMESIZE) == 0) { memcpy(&utuser, &ut, sizeof(utuser)); failed++; } } if (retval != 0) pam_syslog(pamh, LOG_WARNING, "corruption detected in %s", _PATH_BTMP); retval = PAM_SUCCESS; if (failed) { /* we want the date? */ if (announce & LASTLOG_DATE) { struct tm *tm, tm_buf; time_t lf_time; lf_time = utuser.ut_tv.tv_sec; tm = localtime_r (&lf_time, &tm_buf); strftime (the_time, sizeof (the_time), /* TRANSLATORS: "strftime options for date of last login" */ _(" %a %b %e %H:%M:%S %Z %Y"), tm); date = the_time; } /* we want & have the host? */ if ((announce & LASTLOG_HOST) && (utuser.ut_host[0] != '\0')) { /* TRANSLATORS: " from " */ if (asprintf(&host, _(" from %.*s"), UT_HOSTSIZE, utuser.ut_host) < 0) { pam_syslog(pamh, LOG_ERR, "out of memory"); retval = PAM_BUF_ERR; goto cleanup; } } /* we want and have the terminal? */ if ((announce & LASTLOG_LINE) && (utuser.ut_line[0] != '\0')) { /* TRANSLATORS: " on " */ if (asprintf(&line, _(" on %.*s"), UT_LINESIZE, utuser.ut_line) < 0) { pam_syslog(pamh, LOG_ERR, "out of memory"); retval = PAM_BUF_ERR; goto cleanup; } } if (line != NULL || date != NULL || host != NULL) { /* TRANSLATORS: "Last failed login: from on " */ pam_info(pamh, _("Last failed login:%s%s%s"), date ? date : "", host ? host : "", line ? line : ""); } _pam_drop(line); #if defined HAVE_DNGETTEXT && defined ENABLE_NLS retval = asprintf (&line, dngettext(PACKAGE, "There was %d failed login attempt since the last successful login.", "There were %d failed login attempts since the last successful login.", failed), failed); #else if (failed == 1) retval = asprintf(&line, _("There was %d failed login attempt since the last successful login."), failed); else retval = asprintf(&line, /* TRANSLATORS: only used if dngettext is not supported */ _("There were %d failed login attempts since the last successful login."), failed); #endif if (retval >= 0) retval = pam_info(pamh, "%s", line); else { retval = PAM_BUF_ERR; line = NULL; } } cleanup: free(host); free(line); close(fd); D(("all done with btmp")); return retval; } /* --- authentication (locking out inactive users) functions --- */ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) { int retval, ctrl; const char *user = NULL; const struct passwd *pwd; uid_t uid; time_t lltime = 0; time_t inactive_days = 0; int last_fd; /* * Lock out the user if he did not login recently enough. */ ctrl = _pam_auth_parse(pamh, flags, argc, argv, &inactive_days); /* which user? */ if (pam_get_user(pamh, &user, NULL) != PAM_SUCCESS || user == NULL || *user == '\0') { pam_syslog(pamh, LOG_ERR, "cannot determine the user's name"); return PAM_USER_UNKNOWN; } /* what uid? */ pwd = pam_modutil_getpwnam (pamh, user); if (pwd == NULL) { pam_syslog(pamh, LOG_ERR, "user unknown"); return PAM_USER_UNKNOWN; } uid = pwd->pw_uid; pwd = NULL; /* tidy up */ if (uid == 0) return PAM_SUCCESS; /* obtain the last login date and all the relevant info */ last_fd = last_login_open(pamh, ctrl, uid); if (last_fd < 0) { return PAM_IGNORE; } retval = last_login_read(pamh, ctrl|LASTLOG_QUIET, last_fd, uid, &lltime); close(last_fd); if (retval != PAM_SUCCESS) { D(("error while reading lastlog file")); return PAM_IGNORE; } if (lltime == 0) { /* user never logged in before */ if (ctrl & LASTLOG_DEBUG) pam_syslog(pamh, LOG_DEBUG, "user never logged in - pass"); return PAM_SUCCESS; } lltime = (time(NULL) - lltime) / (24*60*60); if (lltime > inactive_days) { pam_syslog(pamh, LOG_INFO, "user %s inactive for %d days - denied", user, lltime); return PAM_AUTH_ERR; } return PAM_SUCCESS; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_sm_authenticate(pamh, flags, argc, argv); } /* --- session management functions --- */ PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) { int retval, ctrl; const void *user; const struct passwd *pwd; uid_t uid; time_t lltime = 0; /* * this module gets the uid of the PAM_USER. Uses it to display * last login info and then updates the lastlog for that user. */ ctrl = _pam_session_parse(pamh, flags, argc, argv); /* which user? */ retval = pam_get_item(pamh, PAM_USER, &user); if (retval != PAM_SUCCESS || user == NULL || *(const char *)user == '\0') { pam_syslog(pamh, LOG_NOTICE, "user unknown"); return PAM_USER_UNKNOWN; } /* what uid? */ pwd = pam_modutil_getpwnam (pamh, user); if (pwd == NULL) { D(("couldn't identify user %s", user)); return PAM_USER_UNKNOWN; } uid = pwd->pw_uid; pwd = NULL; /* tidy up */ /* process the current login attempt (indicate last) */ retval = last_login_date(pamh, ctrl, uid, user, &lltime); if ((ctrl & LASTLOG_BTMP) && retval == PAM_SUCCESS) { retval = last_login_failed(pamh, ctrl, user, lltime); } /* indicate success or failure */ uid = -1; /* forget this */ return retval; } PAM_EXTERN int pam_sm_close_session (pam_handle_t *pamh, int flags, int argc, const char **argv) { const char *terminal_line; if (!(_pam_session_parse(pamh, flags, argc, argv) & LASTLOG_WTMP)) return PAM_SUCCESS; terminal_line = get_tty(pamh); /* Wipe out utmp logout entry */ logwtmp(terminal_line, "", ""); return PAM_SUCCESS; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_lastlog_modstruct = { "pam_lastlog", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, NULL, }; #endif /* end of module definition */ Linux-PAM-1.1.8/modules/pam_listfile/0000755000000000000000000000000012216542311014317 500000000000000Linux-PAM-1.1.8/modules/pam_listfile/pam_listfile.80000644000000000000000000001342212216527601017007 00000000000000'\" t .\" Title: pam_listfile .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_LISTFILE" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_listfile \- deny or allow services based on an arbitrary file .SH "SYNOPSIS" .HP \w'\fBpam_listfile\&.so\fR\ 'u \fBpam_listfile\&.so\fR item=[tty|user|rhost|ruser|group|shell] sense=[allow|deny] file=\fI/path/filename\fR onerr=[succeed|fail] [apply=[\fIuser\fR|\fI@group\fR]] [quiet] .SH "DESCRIPTION" .PP pam_listfile is a PAM module which provides a way to deny or allow services based on an arbitrary file\&. .PP The module gets the \fBitem\fR of the type specified \-\- \fIuser\fR specifies the username, \fIPAM_USER\fR; tty specifies the name of the terminal over which the request has been made, \fIPAM_TTY\fR; rhost specifies the name of the remote host (if any) from which the request was made, \fIPAM_RHOST\fR; and ruser specifies the name of the remote user (if available) who made the request, \fIPAM_RUSER\fR \-\- and looks for an instance of that item in the \fBfile=\fR\fB\fIfilename\fR\fR\&. filename contains one line per item listed\&. If the item is found, then if \fBsense=\fR\fB\fIallow\fR\fR, \fIPAM_SUCCESS\fR is returned, causing the authorization request to succeed; else if \fBsense=\fR\fB\fIdeny\fR\fR, \fIPAM_AUTH_ERR\fR is returned, causing the authorization request to fail\&. .PP If an error is encountered (for instance, if filename does not exist, or a poorly\-constructed argument is encountered), then if \fIonerr=succeed\fR, \fIPAM_SUCCESS\fR is returned, otherwise if \fIonerr=fail\fR, \fIPAM_AUTH_ERR\fR or \fIPAM_SERVICE_ERR\fR (as appropriate) will be returned\&. .PP An additional argument, \fBapply=\fR, can be used to restrict the application of the above to a specific user (\fBapply=\fR\fB\fIusername\fR\fR) or a given group (\fBapply=\fR\fB\fI@groupname\fR\fR)\&. This added restriction is only meaningful when used with the \fItty\fR, \fIrhost\fR and \fIshell\fR items\&. .PP Besides this last one, all arguments should be specified; do not count on any default behavior\&. .PP No credentials are awarded by this module\&. .SH "OPTIONS" .PP .PP \fBitem=[tty|user|rhost|ruser|group|shell]\fR .RS 4 What is listed in the file and should be checked for\&. .RE .PP \fBsense=[allow|deny]\fR .RS 4 Action to take if found in file, if the item is NOT found in the file, then the opposite action is requested\&. .RE .PP \fBfile=\fR\fB\fI/path/filename\fR\fR .RS 4 File containing one item per line\&. The file needs to be a plain file and not world writable\&. .RE .PP \fBonerr=[succeed|fail]\fR .RS 4 What to do if something weird happens like being unable to open the file\&. .RE .PP \fBapply=[\fR\fB\fIuser\fR\fR\fB|\fR\fB\fI@group\fR\fR\fB]\fR .RS 4 Restrict the user class for which the restriction apply\&. Note that with \fBitem=[user|ruser|group]\fR this does not make sense, but for \fBitem=[tty|rhost|shell]\fR it have a meaning\&. .RE .PP \fBquiet\fR .RS 4 Do not treat service refusals or missing list files as errors that need to be logged\&. .RE .SH "MODULE TYPES PROVIDED" .PP All module types (\fBauth\fR, \fBaccount\fR, \fBpassword\fR and \fBsession\fR) are provided\&. .SH "RETURN VALUES" .PP .PP PAM_AUTH_ERR .RS 4 Authentication failure\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_IGNORE .RS 4 The rule does not apply to the \fBapply\fR option\&. .RE .PP PAM_SERVICE_ERR .RS 4 Error in service module\&. .RE .PP PAM_SUCCESS .RS 4 Success\&. .RE .SH "EXAMPLES" .PP Classic \*(Aqftpusers\*(Aq authentication can be implemented with this entry in /etc/pam\&.d/ftpd: .sp .if n \{\ .RS 4 .\} .nf # # deny ftp\-access to users listed in the /etc/ftpusers file # auth required pam_listfile\&.so \e onerr=succeed item=user sense=deny file=/etc/ftpusers .fi .if n \{\ .RE .\} .sp Note, users listed in /etc/ftpusers file are (counterintuitively) \fInot\fR allowed access to the ftp service\&. .PP To allow login access only for certain users, you can use a /etc/pam\&.d/login entry like this: .sp .if n \{\ .RS 4 .\} .nf # # permit login to users listed in /etc/loginusers # auth required pam_listfile\&.so \e onerr=fail item=user sense=allow file=/etc/loginusers .fi .if n \{\ .RE .\} .sp For this example to work, all users who are allowed to use the login service should be listed in the file /etc/loginusers\&. Unless you are explicitly trying to lock out root, make sure that when you do this, you leave a way for root to log in, either by listing root in /etc/loginusers, or by listing a user who is able to \fIsu\fR to the root account\&. .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_listfile was written by Michael K\&. Johnson and Elliot Lee \&. Linux-PAM-1.1.8/modules/pam_listfile/pam_listfile.8.xml0000644000000000000000000002236512160065211017604 00000000000000 pam_listfile 8 Linux-PAM Manual pam_listfile deny or allow services based on an arbitrary file pam_listfile.so item=[tty|user|rhost|ruser|group|shell] sense=[allow|deny] file=/path/filename onerr=[succeed|fail] apply=[user|@group] quiet DESCRIPTION pam_listfile is a PAM module which provides a way to deny or allow services based on an arbitrary file. The module gets the of the type specified -- user specifies the username, PAM_USER; tty specifies the name of the terminal over which the request has been made, PAM_TTY; rhost specifies the name of the remote host (if any) from which the request was made, PAM_RHOST; and ruser specifies the name of the remote user (if available) who made the request, PAM_RUSER -- and looks for an instance of that item in the . filename contains one line per item listed. If the item is found, then if , PAM_SUCCESS is returned, causing the authorization request to succeed; else if , PAM_AUTH_ERR is returned, causing the authorization request to fail. If an error is encountered (for instance, if filename does not exist, or a poorly-constructed argument is encountered), then if onerr=succeed, PAM_SUCCESS is returned, otherwise if onerr=fail, PAM_AUTH_ERR or PAM_SERVICE_ERR (as appropriate) will be returned. An additional argument, , can be used to restrict the application of the above to a specific user () or a given group (). This added restriction is only meaningful when used with the tty, rhost and shell items. Besides this last one, all arguments should be specified; do not count on any default behavior. No credentials are awarded by this module. OPTIONS What is listed in the file and should be checked for. Action to take if found in file, if the item is NOT found in the file, then the opposite action is requested. File containing one item per line. The file needs to be a plain file and not world writable. What to do if something weird happens like being unable to open the file. Restrict the user class for which the restriction apply. Note that with this does not make sense, but for it have a meaning. Do not treat service refusals or missing list files as errors that need to be logged. MODULE TYPES PROVIDED All module types (, , and ) are provided. RETURN VALUES PAM_AUTH_ERR Authentication failure. PAM_BUF_ERR Memory buffer error. PAM_IGNORE The rule does not apply to the option. PAM_SERVICE_ERR Error in service module. PAM_SUCCESS Success. EXAMPLES Classic 'ftpusers' authentication can be implemented with this entry in /etc/pam.d/ftpd: # # deny ftp-access to users listed in the /etc/ftpusers file # auth required pam_listfile.so \ onerr=succeed item=user sense=deny file=/etc/ftpusers Note, users listed in /etc/ftpusers file are (counterintuitively) not allowed access to the ftp service. To allow login access only for certain users, you can use a /etc/pam.d/login entry like this: # # permit login to users listed in /etc/loginusers # auth required pam_listfile.so \ onerr=fail item=user sense=allow file=/etc/loginusers For this example to work, all users who are allowed to use the login service should be listed in the file /etc/loginusers. Unless you are explicitly trying to lock out root, make sure that when you do this, you leave a way for root to log in, either by listing root in /etc/loginusers, or by listing a user who is able to su to the root account. SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_listfile was written by Michael K. Johnson <johnsonm@redhat.com> and Elliot Lee <sopwith@cuc.edu>. Linux-PAM-1.1.8/modules/pam_listfile/Makefile.am0000644000000000000000000000136412160065211016274 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_listfile man_MANS = pam_listfile.8 XMLS = README.xml pam_listfile.8.xml TESTS = tst-pam_listfile securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_listfile.la pam_listfile_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_listfile.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_listfile/README0000644000000000000000000000705012216527601015126 00000000000000pam_listfile — deny or allow services based on an arbitrary file ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_listfile is a PAM module which provides a way to deny or allow services based on an arbitrary file. The module gets the item of the type specified -- user specifies the username, PAM_USER; tty specifies the name of the terminal over which the request has been made, PAM_TTY; rhost specifies the name of the remote host (if any) from which the request was made, PAM_RHOST; and ruser specifies the name of the remote user (if available) who made the request, PAM_RUSER -- and looks for an instance of that item in the file=filename. filename contains one line per item listed. If the item is found, then if sense=allow, PAM_SUCCESS is returned, causing the authorization request to succeed; else if sense=deny, PAM_AUTH_ERR is returned, causing the authorization request to fail. If an error is encountered (for instance, if filename does not exist, or a poorly-constructed argument is encountered), then if onerr=succeed, PAM_SUCCESS is returned, otherwise if onerr=fail, PAM_AUTH_ERR or PAM_SERVICE_ERR (as appropriate) will be returned. An additional argument, apply=, can be used to restrict the application of the above to a specific user (apply=username) or a given group (apply=@groupname). This added restriction is only meaningful when used with the tty, rhost and shell items. Besides this last one, all arguments should be specified; do not count on any default behavior. No credentials are awarded by this module. OPTIONS item=[tty|user|rhost|ruser|group|shell] What is listed in the file and should be checked for. sense=[allow|deny] Action to take if found in file, if the item is NOT found in the file, then the opposite action is requested. file=/path/filename File containing one item per line. The file needs to be a plain file and not world writable. onerr=[succeed|fail] What to do if something weird happens like being unable to open the file. apply=[user|@group] Restrict the user class for which the restriction apply. Note that with item=[user|ruser|group] this does not make sense, but for item=[tty|rhost| shell] it have a meaning. quiet Do not treat service refusals or missing list files as errors that need to be logged. EXAMPLES Classic 'ftpusers' authentication can be implemented with this entry in /etc/ pam.d/ftpd: # # deny ftp-access to users listed in the /etc/ftpusers file # auth required pam_listfile.so \ onerr=succeed item=user sense=deny file=/etc/ftpusers Note, users listed in /etc/ftpusers file are (counterintuitively) not allowed access to the ftp service. To allow login access only for certain users, you can use a /etc/pam.d/login entry like this: # # permit login to users listed in /etc/loginusers # auth required pam_listfile.so \ onerr=fail item=user sense=allow file=/etc/loginusers For this example to work, all users who are allowed to use the login service should be listed in the file /etc/loginusers. Unless you are explicitly trying to lock out root, make sure that when you do this, you leave a way for root to log in, either by listing root in /etc/loginusers, or by listing a user who is able to su to the root account. AUTHOR pam_listfile was written by Michael K. Johnson and Elliot Lee . Linux-PAM-1.1.8/modules/pam_listfile/Makefile.in0000644000000000000000000006017712216527536016333 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_listfile DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_listfile_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_listfile_la_SOURCES = pam_listfile.c pam_listfile_la_OBJECTS = pam_listfile.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_listfile.c DIST_SOURCES = pam_listfile.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_listfile man_MANS = pam_listfile.8 XMLS = README.xml pam_listfile.8.xml TESTS = tst-pam_listfile securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_listfile.la pam_listfile_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_listfile/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_listfile/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_listfile.la: $(pam_listfile_la_OBJECTS) $(pam_listfile_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_listfile_la_OBJECTS) $(pam_listfile_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_listfile.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_listfile.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_listfile/tst-pam_listfile0000755000000000000000000000006712160065211017445 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_listfile.so Linux-PAM-1.1.8/modules/pam_listfile/pam_listfile.c0000644000000000000000000002467312160065211017064 00000000000000/* * by Elliot Lee , Red Hat Software. July 25, 1996. * log refused access error christopher mccrory 1998/7/11 * * This code began life as the pam_rootok module. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #ifdef PAM_DEBUG #include #endif /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #define PAM_SM_PASSWORD #define PAM_SM_SESSION #include #include #include #include /* --- authentication management functions (only) --- */ /* Extended Items that are not directly available via pam_get_item() */ #define EI_GROUP (1 << 0) #define EI_SHELL (1 << 1) /* Constants for apply= parameter */ #define APPLY_TYPE_NULL 0 #define APPLY_TYPE_NONE 1 #define APPLY_TYPE_USER 2 #define APPLY_TYPE_GROUP 3 #define LESSER(a, b) ((a) < (b) ? (a) : (b)) PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int retval, i, citem=0, extitem=0, onerr=PAM_SERVICE_ERR, sense=2, quiet=0; const void *void_citemp; const char *citemp; char *ifname=NULL; char aline[256]; char mybuf[256],myval[256]; struct stat fileinfo; FILE *inf; char apply_val[256]; int apply_type; /* Stuff for "extended" items */ struct passwd *userinfo; apply_type=APPLY_TYPE_NULL; memset(apply_val,0,sizeof(apply_val)); for(i=0; i < argc; i++) { { const char *junk; /* option quiet has no value */ if(!strcmp(argv[i],"quiet")) { quiet = 1; continue; } memset(mybuf,'\0',sizeof(mybuf)); memset(myval,'\0',sizeof(myval)); junk = strchr(argv[i], '='); if((junk == NULL) || (junk - argv[i]) >= (int) sizeof(mybuf)) { pam_syslog(pamh,LOG_ERR, "Bad option: \"%s\"", argv[i]); continue; } strncpy(mybuf, argv[i], LESSER(junk - argv[i], (int)sizeof(mybuf) - 1)); strncpy(myval, junk + 1, sizeof(myval) - 1); } if(!strcmp(mybuf,"onerr")) if(!strcmp(myval,"succeed")) onerr = PAM_SUCCESS; else if(!strcmp(myval,"fail")) onerr = PAM_SERVICE_ERR; else { if (ifname) free (ifname); return PAM_SERVICE_ERR; } else if(!strcmp(mybuf,"sense")) if(!strcmp(myval,"allow")) sense=0; else if(!strcmp(myval,"deny")) sense=1; else { if (ifname) free (ifname); return onerr; } else if(!strcmp(mybuf,"file")) { if (ifname) free (ifname); ifname = (char *)malloc(strlen(myval)+1); if (!ifname) return PAM_BUF_ERR; strcpy(ifname,myval); } else if(!strcmp(mybuf,"item")) if(!strcmp(myval,"user")) citem = PAM_USER; else if(!strcmp(myval,"tty")) citem = PAM_TTY; else if(!strcmp(myval,"rhost")) citem = PAM_RHOST; else if(!strcmp(myval,"ruser")) citem = PAM_RUSER; else { /* These items are related to the user, but are not directly gettable with pam_get_item */ citem = PAM_USER; if(!strcmp(myval,"group")) extitem = EI_GROUP; else if(!strcmp(myval,"shell")) extitem = EI_SHELL; else citem = 0; } else if(!strcmp(mybuf,"apply")) { apply_type=APPLY_TYPE_NONE; memset(apply_val,'\0',sizeof(apply_val)); if (myval[0]=='@') { apply_type=APPLY_TYPE_GROUP; strncpy(apply_val,myval+1,sizeof(apply_val)-1); } else { apply_type=APPLY_TYPE_USER; strncpy(apply_val,myval,sizeof(apply_val)-1); } } else { free(ifname); pam_syslog(pamh,LOG_ERR, "Unknown option: %s",mybuf); return onerr; } } if(!citem) { pam_syslog(pamh,LOG_ERR, "Unknown item or item not specified"); free(ifname); return onerr; } else if(!ifname) { pam_syslog(pamh,LOG_ERR, "List filename not specified"); return onerr; } else if(sense == 2) { pam_syslog(pamh,LOG_ERR, "Unknown sense or sense not specified"); free(ifname); return onerr; } else if( (apply_type==APPLY_TYPE_NONE) || ((apply_type!=APPLY_TYPE_NULL) && (*apply_val=='\0')) ) { pam_syslog(pamh,LOG_ERR, "Invalid usage for apply= parameter"); free (ifname); return onerr; } /* Check if it makes sense to use the apply= parameter */ if (apply_type != APPLY_TYPE_NULL) { if((citem==PAM_USER) || (citem==PAM_RUSER)) { pam_syslog(pamh,LOG_WARNING, "Non-sense use for apply= parameter"); apply_type=APPLY_TYPE_NULL; } if(extitem && (extitem==EI_GROUP)) { pam_syslog(pamh,LOG_WARNING, "Non-sense use for apply= parameter"); apply_type=APPLY_TYPE_NULL; } } /* Short-circuit - test if this session apply for this user */ { const char *user_name; int rval; rval=pam_get_user(pamh,&user_name,NULL); if((rval==PAM_SUCCESS) && user_name && user_name[0]) { /* Got it ? Valid ? */ if(apply_type==APPLY_TYPE_USER) { if(strcmp(user_name, apply_val)) { /* Does not apply to this user */ #ifdef PAM_DEBUG pam_syslog(pamh,LOG_DEBUG, "don't apply: apply=%s, user=%s", apply_val,user_name); #endif /* PAM_DEBUG */ free(ifname); return PAM_IGNORE; } } else if(apply_type==APPLY_TYPE_GROUP) { if(!pam_modutil_user_in_group_nam_nam(pamh,user_name,apply_val)) { /* Not a member of apply= group */ #ifdef PAM_DEBUG pam_syslog(pamh,LOG_DEBUG, "don't apply: %s not a member of group %s", user_name,apply_val); #endif /* PAM_DEBUG */ free(ifname); return PAM_IGNORE; } } } } retval = pam_get_item(pamh,citem,&void_citemp); citemp = void_citemp; if(retval != PAM_SUCCESS) { free(ifname); return onerr; } if((citem == PAM_USER) && !citemp) { retval = pam_get_user(pamh,&citemp,NULL); if (retval != PAM_SUCCESS || !citemp) { free(ifname); return PAM_SERVICE_ERR; } } if((citem == PAM_TTY) && citemp) { /* Normalize the TTY name. */ if(strncmp(citemp, "/dev/", 5) == 0) { citemp += 5; } } if(!citemp || (strlen(citemp) == 0)) { free(ifname); /* The item was NULL - we are sure not to match */ return sense?PAM_SUCCESS:PAM_AUTH_ERR; } if(extitem) { switch(extitem) { case EI_GROUP: /* Just ignore, call pam_modutil_in_group... later */ break; case EI_SHELL: /* Assume that we have already gotten PAM_USER in pam_get_item() - a valid assumption since citem gets set to PAM_USER in the extitem switch */ userinfo = pam_modutil_getpwnam(pamh, citemp); if (userinfo == NULL) { pam_syslog(pamh,LOG_ERR, "getpwnam(%s) failed", citemp); free(ifname); return onerr; } citemp = userinfo->pw_shell; break; default: pam_syslog(pamh,LOG_ERR, "Internal weirdness, unknown extended item %d", extitem); free(ifname); return onerr; } } #ifdef PAM_DEBUG pam_syslog(pamh,LOG_INFO, "Got file = %s, item = %d, value = %s, sense = %d", ifname, citem, citemp, sense); #endif if(lstat(ifname,&fileinfo)) { if(!quiet) pam_syslog(pamh,LOG_ERR, "Couldn't open %s",ifname); free(ifname); return onerr; } if((fileinfo.st_mode & S_IWOTH) || !S_ISREG(fileinfo.st_mode)) { /* If the file is world writable or is not a normal file, return error */ pam_syslog(pamh,LOG_ERR, "%s is either world writable or not a normal file", ifname); free(ifname); return PAM_AUTH_ERR; } inf = fopen(ifname,"r"); if(inf == NULL) { /* Check that we opened it successfully */ if (onerr == PAM_SERVICE_ERR) { /* Only report if it's an error... */ pam_syslog(pamh,LOG_ERR, "Error opening %s", ifname); } free(ifname); return onerr; } /* There should be no more errors from here on */ retval=PAM_AUTH_ERR; /* This loop assumes that PAM_SUCCESS == 0 and PAM_AUTH_ERR != 0 */ #ifdef PAM_DEBUG assert(PAM_SUCCESS == 0); assert(PAM_AUTH_ERR != 0); #endif while((fgets(aline,sizeof(aline),inf) != NULL) && retval) { char *a = aline; if(strlen(aline) == 0) continue; if(aline[strlen(aline) - 1] == '\n') aline[strlen(aline) - 1] = '\0'; if(strlen(aline) == 0) continue; if(aline[strlen(aline) - 1] == '\r') aline[strlen(aline) - 1] = '\0'; if(citem == PAM_TTY) { if(strncmp(a, "/dev/", 5) == 0) a += 5; } if (extitem == EI_GROUP) { retval = !pam_modutil_user_in_group_nam_nam(pamh, citemp, aline); } else { retval = strcmp(a, citemp); } } fclose(inf); free(ifname); if ((sense && retval) || (!sense && !retval)) { #ifdef PAM_DEBUG pam_syslog(pamh,LOG_INFO, "Returning PAM_SUCCESS, retval = %d", retval); #endif return PAM_SUCCESS; } else { const void *service; const char *user_name; #ifdef PAM_DEBUG pam_syslog(pamh,LOG_INFO, "Returning PAM_AUTH_ERR, retval = %d", retval); #endif (void) pam_get_item(pamh, PAM_SERVICE, &service); (void) pam_get_user(pamh, &user_name, NULL); if (!quiet) pam_syslog (pamh, LOG_ALERT, "Refused user %s for service %s", user_name, (const char *)service); return PAM_AUTH_ERR; } } PAM_EXTERN int pam_sm_setcred (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } PAM_EXTERN int pam_sm_acct_mgmt (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_sm_authenticate(pamh, flags, argc, argv); } PAM_EXTERN int pam_sm_open_session (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_sm_authenticate(pamh, flags, argc, argv); } PAM_EXTERN int pam_sm_close_session (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_sm_authenticate(pamh, flags, argc, argv); } PAM_EXTERN int pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_sm_authenticate(pamh, flags, argc, argv); } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_listfile_modstruct = { "pam_listfile", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, pam_sm_chauthtok, }; #endif /* PAM_STATIC */ /* end of module definition */ Linux-PAM-1.1.8/modules/pam_listfile/README.xml0000644000000000000000000000224312160065211015714 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_listfile.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_listfile-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_warn/0000755000000000000000000000000012216542312013454 500000000000000Linux-PAM-1.1.8/modules/pam_warn/pam_warn.8.xml0000644000000000000000000000612212160065211016065 00000000000000 pam_warn 8 Linux-PAM Manual pam_warn PAM module which logs all PAM items if called pam_warn.so DESCRIPTION pam_warn is a PAM module that logs the service, terminal, user, remote user and remote host to syslog3 . The items are not probed for, but instead obtained from the standard PAM items. The module always returns PAM_IGNORE, indicating that it does not want to affect the authentication process. OPTIONS This module does not recognise any options. MODULE TYPES PROVIDED The , , and module types are provided. RETURN VALUES PAM_IGNORE This module always returns PAM_IGNORE. EXAMPLES #%PAM-1.0 # # If we don't have config entries for a service, the # OTHER entries are used. To be secure, warn and deny # access to everything. other auth required pam_warn.so other auth required pam_deny.so other account required pam_warn.so other account required pam_deny.so other password required pam_warn.so other password required pam_deny.so other session required pam_warn.so other session required pam_deny.so SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_warn was written by Andrew G. Morgan <morgan@kernel.org>. Linux-PAM-1.1.8/modules/pam_warn/pam_warn.c0000644000000000000000000000555212160065211015347 00000000000000/* pam_warn module */ /* * $Id$ * * Written by Andrew Morgan 1996/3/11 */ #include "config.h" #include #include #include #include /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #define PAM_SM_AUTH #define PAM_SM_PASSWORD #include #include /* some syslogging */ #define OBTAIN(item, value, default_value) do { \ (void) pam_get_item(pamh, item, &value); \ value = value ? value : default_value ; \ } while (0) static void log_items(pam_handle_t *pamh, const char *function) { const void *service=NULL, *user=NULL, *terminal=NULL, *rhost=NULL, *ruser=NULL; OBTAIN(PAM_SERVICE, service, ""); OBTAIN(PAM_TTY, terminal, ""); OBTAIN(PAM_USER, user, ""); OBTAIN(PAM_RUSER, ruser, ""); OBTAIN(PAM_RHOST, rhost, ""); pam_syslog(pamh, LOG_NOTICE, "function=[%s] service=[%s] terminal=[%s] user=[%s]" " ruser=[%s] rhost=[%s]\n", function, (const char *) service, (const char *) terminal, (const char *) user, (const char *) ruser, (const char *) rhost); } /* --- authentication management functions (only) --- */ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { log_items(pamh, __FUNCTION__); return PAM_IGNORE; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { log_items(pamh, __FUNCTION__); return PAM_IGNORE; } /* password updating functions */ PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { log_items(pamh, __FUNCTION__); return PAM_IGNORE; } PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { log_items(pamh, __FUNCTION__); return PAM_IGNORE; } PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { log_items(pamh, __FUNCTION__); return PAM_IGNORE; } PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { log_items(pamh, __FUNCTION__); return PAM_IGNORE; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_warn_modstruct = { "pam_warn", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, pam_sm_chauthtok, }; #endif /* end of module definition */ Linux-PAM-1.1.8/modules/pam_warn/pam_warn.80000644000000000000000000000521412216527616015305 00000000000000'\" t .\" Title: pam_warn .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_WARN" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_warn \- PAM module which logs all PAM items if called .SH "SYNOPSIS" .HP \w'\fBpam_warn\&.so\fR\ 'u \fBpam_warn\&.so\fR .SH "DESCRIPTION" .PP pam_warn is a PAM module that logs the service, terminal, user, remote user and remote host to \fBsyslog\fR(3)\&. The items are not probed for, but instead obtained from the standard PAM items\&. The module always returns \fBPAM_IGNORE\fR, indicating that it does not want to affect the authentication process\&. .SH "OPTIONS" .PP This module does not recognise any options\&. .SH "MODULE TYPES PROVIDED" .PP The \fBauth\fR, \fBaccount\fR, \fBpassword\fR and \fBsession\fR module types are provided\&. .SH "RETURN VALUES" .PP PAM_IGNORE .RS 4 This module always returns PAM_IGNORE\&. .RE .SH "EXAMPLES" .sp .if n \{\ .RS 4 .\} .nf #%PAM\-1\&.0 # # If we don\*(Aqt have config entries for a service, the # OTHER entries are used\&. To be secure, warn and deny # access to everything\&. other auth required pam_warn\&.so other auth required pam_deny\&.so other account required pam_warn\&.so other account required pam_deny\&.so other password required pam_warn\&.so other password required pam_deny\&.so other session required pam_warn\&.so other session required pam_deny\&.so .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_warn was written by Andrew G\&. Morgan \&. Linux-PAM-1.1.8/modules/pam_warn/Makefile.am0000644000000000000000000000133012160065211015421 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_warn man_MANS = pam_warn.8 XMLS = README.xml pam_warn.8.xml TESTS = tst-pam_warn securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_warn.la pam_warn_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_warn.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_warn/tst-pam_warn0000755000000000000000000000006312160065211015731 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_warn.so Linux-PAM-1.1.8/modules/pam_warn/README0000644000000000000000000000231012216527616014262 00000000000000pam_warn — PAM module which logs all PAM items if called ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_warn is a PAM module that logs the service, terminal, user, remote user and remote host to syslog(3). The items are not probed for, but instead obtained from the standard PAM items. The module always returns PAM_IGNORE, indicating that it does not want to affect the authentication process. OPTIONS This module does not recognise any options. EXAMPLES #%PAM-1.0 # # If we don't have config entries for a service, the # OTHER entries are used. To be secure, warn and deny # access to everything. other auth required pam_warn.so other auth required pam_deny.so other account required pam_warn.so other account required pam_deny.so other password required pam_warn.so other password required pam_deny.so other session required pam_warn.so other session required pam_deny.so AUTHOR pam_warn was written by Andrew G. Morgan . Linux-PAM-1.1.8/modules/pam_warn/Makefile.in0000644000000000000000000006004312216527540015452 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_warn DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_warn_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_warn_la_SOURCES = pam_warn.c pam_warn_la_OBJECTS = pam_warn.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_warn.c DIST_SOURCES = pam_warn.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_warn man_MANS = pam_warn.8 XMLS = README.xml pam_warn.8.xml TESTS = tst-pam_warn securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_warn.la pam_warn_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_warn/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_warn/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_warn.la: $(pam_warn_la_OBJECTS) $(pam_warn_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_warn_la_OBJECTS) $(pam_warn_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_warn.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_warn.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_warn/README.xml0000644000000000000000000000216712160065211015055 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_warn.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_warn-name"]/*)'/>
Linux-PAM-1.1.8/modules/modules.map0000644000000000000000000000024712160065211013736 00000000000000{ global: pam_sm_acct_mgmt; pam_sm_authenticate; pam_sm_chauthtok; pam_sm_close_session; pam_sm_open_session; pam_sm_setcred; local: *; }; Linux-PAM-1.1.8/modules/pam_env/0000755000000000000000000000000012216542311013274 500000000000000Linux-PAM-1.1.8/modules/pam_env/pam_env.conf.5.xml0000644000000000000000000001043512160065211016452 00000000000000 pam_env.conf 5 Linux-PAM Manual pam_env.conf the environment variables config file DESCRIPTION The /etc/security/pam_env.conf file specifies the environment variables to be set, unset or modified by pam_env8. When someone logs in, this file is read and the environment variables are set according. Each line starts with the variable name, there are then two possible options for each variable DEFAULT and OVERRIDE. DEFAULT allows and administrator to set the value of the variable to some default value, if none is supplied then the empty string is assumed. The OVERRIDE option tells pam_env that it should enter in its value (overriding the default value) if there is one to use. OVERRIDE is not used, "" is assumed and no override will be done. VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]] (Possibly non-existent) environment variables may be used in values using the ${string} syntax and (possibly non-existent) PAM_ITEMs may be used in values using the @{string} syntax. Both the $ and @ characters can be backslash escaped to be used as literal values values can be delimited with "", escaped " not supported. Note that many environment variables that you would like to use may not be set by the time the module is called. For example, HOME is used below several times, but many PAM applications don't make it available by the time you need it. The "#" character at start of line (no space at front) can be used to mark this line as a comment line. EXAMPLES These are some example lines which might be specified in /etc/security/pam_env.conf. Set the REMOTEHOST variable for any hosts that are remote, default to "localhost" rather than not being set at all REMOTEHOST DEFAULT=localhost OVERRIDE=@{PAM_RHOST} Set the DISPLAY variable if it seems reasonable DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY} Now some simple variables PAGER DEFAULT=less MANPAGER DEFAULT=less LESS DEFAULT="M q e h15 z23 b80" NNTPSERVER DEFAULT=localhost PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\ :/usr/bin:/usr/local/bin/X11:/usr/bin/X11 Silly examples of escaped variables, just to show how they work. DOLLAR DEFAULT=\$ DOLLARDOLLAR DEFAULT= OVERRIDE=\$${DOLLAR} DOLLARPLUS DEFAULT=\${REMOTEHOST}${REMOTEHOST} ATSIGN DEFAULT="" OVERRIDE=\@ SEE ALSO pam_env8, pam.d5, pam8 AUTHOR pam_env was written by Dave Kinchlea <kinch@kinch.ark.com>. Linux-PAM-1.1.8/modules/pam_env/pam_env.conf.50000644000000000000000000001001212216527573015662 00000000000000'\" t .\" Title: pam_env.conf .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_ENV\&.CONF" "5" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_env.conf \- the environment variables config file .SH "DESCRIPTION" .PP The /etc/security/pam_env\&.conf file specifies the environment variables to be set, unset or modified by \fBpam_env\fR(8)\&. When someone logs in, this file is read and the environment variables are set according\&. .PP Each line starts with the variable name, there are then two possible options for each variable DEFAULT and OVERRIDE\&. DEFAULT allows and administrator to set the value of the variable to some default value, if none is supplied then the empty string is assumed\&. The OVERRIDE option tells pam_env that it should enter in its value (overriding the default value) if there is one to use\&. OVERRIDE is not used, "" is assumed and no override will be done\&. .PP \fIVARIABLE\fR [\fIDEFAULT=[value]\fR] [\fIOVERRIDE=[value]\fR] .PP (Possibly non\-existent) environment variables may be used in values using the ${string} syntax and (possibly non\-existent) PAM_ITEMs may be used in values using the @{string} syntax\&. Both the $ and @ characters can be backslash escaped to be used as literal values values can be delimited with "", escaped " not supported\&. Note that many environment variables that you would like to use may not be set by the time the module is called\&. For example, HOME is used below several times, but many PAM applications don\*(Aqt make it available by the time you need it\&. .PP The "\fI#\fR" character at start of line (no space at front) can be used to mark this line as a comment line\&. .SH "EXAMPLES" .PP These are some example lines which might be specified in /etc/security/pam_env\&.conf\&. .PP Set the REMOTEHOST variable for any hosts that are remote, default to "localhost" rather than not being set at all .sp .if n \{\ .RS 4 .\} .nf REMOTEHOST DEFAULT=localhost OVERRIDE=@{PAM_RHOST} .fi .if n \{\ .RE .\} .PP Set the DISPLAY variable if it seems reasonable .sp .if n \{\ .RS 4 .\} .nf DISPLAY DEFAULT=${REMOTEHOST}:0\&.0 OVERRIDE=${DISPLAY} .fi .if n \{\ .RE .\} .PP Now some simple variables .sp .if n \{\ .RS 4 .\} .nf PAGER DEFAULT=less MANPAGER DEFAULT=less LESS DEFAULT="M q e h15 z23 b80" NNTPSERVER DEFAULT=localhost PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\e :/usr/bin:/usr/local/bin/X11:/usr/bin/X11 .fi .if n \{\ .RE .\} .PP Silly examples of escaped variables, just to show how they work\&. .sp .if n \{\ .RS 4 .\} .nf DOLLAR DEFAULT=\e$ DOLLARDOLLAR DEFAULT= OVERRIDE=\e$${DOLLAR} DOLLARPLUS DEFAULT=\e${REMOTEHOST}${REMOTEHOST} ATSIGN DEFAULT="" OVERRIDE=\e@ .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBpam_env\fR(8), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_env was written by Dave Kinchlea \&. Linux-PAM-1.1.8/modules/pam_env/environment0000644000000000000000000000014112160065211015474 00000000000000# # This file is parsed by pam_env module # # Syntax: simple "KEY=VAL" pairs on separate lines # Linux-PAM-1.1.8/modules/pam_env/Makefile.am0000644000000000000000000000161312160065211015246 00000000000000# # Copyright (c) 2005, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README pam_env.conf $(MANS) $(XMLS) tst-pam_env environment man_MANS = pam_env.conf.5 pam_env.8 XMLS = README.xml pam_env.conf.5.xml pam_env.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -DDEFAULT_CONF_FILE=\"$(SCONFIGDIR)/pam_env.conf\" AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_env.la pam_env_la_LIBADD = $(top_builddir)/libpam/libpam.la secureconf_DATA = pam_env.conf sysconf_DATA = environment if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_env.8.xml pam_env.conf.5.xml -include $(top_srcdir)/Make.xml.rules endif TESTS = tst-pam_env Linux-PAM-1.1.8/modules/pam_env/README0000644000000000000000000000555012216527573014116 00000000000000pam_env — PAM module to set/unset environment variables ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_env PAM module allows the (un)setting of environment variables. Supported is the use of previously set environment variables as well as PAM_ITEMs such as PAM_RHOST. By default rules for (un)setting of variables is taken from the config file / etc/security/pam_env.conf if no other file is specified. This module can also parse a file with simple KEY=VAL pairs on separate lines (/etc/environment by default). You can change the default file to parse, with the envfile flag and turn it on or off by setting the readenv flag to 1 or 0 respectively. Since setting of PAM environment variables can have side effects to other modules, this module should be the last one on the stack. OPTIONS conffile=/path/to/pam_env.conf Indicate an alternative pam_env.conf style configuration file to override the default. This can be useful when different services need different environments. debug A lot of debug information is printed with syslog(3). envfile=/path/to/environment Indicate an alternative environment file to override the default. This can be useful when different services need different environments. readenv=0|1 Turns on or off the reading of the file specified by envfile (0 is off, 1 is on). By default this option is on. user_envfile=filename Indicate an alternative .pam_environment file to override the default. This can be useful when different services need different environments. The filename is relative to the user home directory. user_readenv=0|1 Turns on or off the reading of the user specific environment file. 0 is off, 1 is on. By default this option is on. EXAMPLES These are some example lines which might be specified in /etc/security/ pam_env.conf. Set the REMOTEHOST variable for any hosts that are remote, default to "localhost" rather than not being set at all REMOTEHOST DEFAULT=localhost OVERRIDE=@{PAM_RHOST} Set the DISPLAY variable if it seems reasonable DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY} Now some simple variables PAGER DEFAULT=less MANPAGER DEFAULT=less LESS DEFAULT="M q e h15 z23 b80" NNTPSERVER DEFAULT=localhost PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\ :/usr/bin:/usr/local/bin/X11:/usr/bin/X11 Silly examples of escaped variables, just to show how they work. DOLLAR DEFAULT=\$ DOLLARDOLLAR DEFAULT= OVERRIDE=\$${DOLLAR} DOLLARPLUS DEFAULT=\${REMOTEHOST}${REMOTEHOST} ATSIGN DEFAULT="" OVERRIDE=\@ Linux-PAM-1.1.8/modules/pam_env/tst-pam_env0000755000000000000000000000006212160065211015372 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_env.so Linux-PAM-1.1.8/modules/pam_env/Makefile.in0000644000000000000000000006737512216527535015316 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_env DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man5dir)" \ "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(secureconfdir)" \ "$(DESTDIR)$(sysconfdir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_env_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_env_la_SOURCES = pam_env.c pam_env_la_OBJECTS = pam_env.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_env.c DIST_SOURCES = pam_env.c man5dir = $(mandir)/man5 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) $(secureconf_DATA) $(sysconf_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README pam_env.conf $(MANS) $(XMLS) tst-pam_env environment man_MANS = pam_env.conf.5 pam_env.8 XMLS = README.xml pam_env.conf.5.xml pam_env.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -DDEFAULT_CONF_FILE=\"$(SCONFIGDIR)/pam_env.conf\" AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_env.la pam_env_la_LIBADD = $(top_builddir)/libpam/libpam.la secureconf_DATA = pam_env.conf sysconf_DATA = environment @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README TESTS = tst-pam_env all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_env/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_env/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_env.la: $(pam_env_la_OBJECTS) $(pam_env_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_env_la_OBJECTS) $(pam_env_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_env.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man5: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" @list=''; test -n "$(man5dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man5dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man5dir)" && rm -f $$files; } install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } install-secureconfDATA: $(secureconf_DATA) @$(NORMAL_INSTALL) test -z "$(secureconfdir)" || $(MKDIR_P) "$(DESTDIR)$(secureconfdir)" @list='$(secureconf_DATA)'; test -n "$(secureconfdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(secureconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(secureconfdir)" || exit $$?; \ done uninstall-secureconfDATA: @$(NORMAL_UNINSTALL) @list='$(secureconf_DATA)'; test -n "$(secureconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(secureconfdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(secureconfdir)" && rm -f $$files install-sysconfDATA: $(sysconf_DATA) @$(NORMAL_INSTALL) test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(sysconfdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(sysconfdir)" && rm -f $$files 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(secureconfdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-secureconfDATA \ install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man5 install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-secureconfDATA \ uninstall-securelibLTLIBRARIES uninstall-sysconfDATA uninstall-man: uninstall-man5 uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man5 install-man8 \ install-pdf install-pdf-am install-ps install-ps-am \ install-secureconfDATA install-securelibLTLIBRARIES \ install-strip install-sysconfDATA 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-man uninstall-man5 uninstall-man8 \ uninstall-secureconfDATA uninstall-securelibLTLIBRARIES \ uninstall-sysconfDATA @ENABLE_REGENERATE_MAN_TRUE@README: pam_env.8.xml pam_env.conf.5.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_env/pam_env.conf0000644000000000000000000000563412160065211015515 00000000000000# # This is the configuration file for pam_env, a PAM module to load in # a configurable list of environment variables for a # # The original idea for this came from Andrew G. Morgan ... # # Mmm. Perhaps you might like to write a pam_env module that reads a # default environment from a file? I can see that as REALLY # useful... Note it would be an "auth" module that returns PAM_IGNORE # for the auth part and sets the environment returning PAM_SUCCESS in # the setcred function... # # # What I wanted was the REMOTEHOST variable set, purely for selfish # reasons, and AGM didn't want it added to the SimpleApps login # program (which is where I added the patch). So, my first concern is # that variable, from there there are numerous others that might/would # be useful to be set: NNTPSERVER, LESS, PATH, PAGER, MANPAGER ..... # # Of course, these are a different kind of variable than REMOTEHOST in # that they are things that are likely to be configured by # administrators rather than set by logging in, how to treat them both # in the same config file? # # Here is my idea: # # Each line starts with the variable name, there are then two possible # options for each variable DEFAULT and OVERRIDE. # DEFAULT allows and administrator to set the value of the # variable to some default value, if none is supplied then the empty # string is assumed. The OVERRIDE option tells pam_env that it should # enter in its value (overriding the default value) if there is one # to use. OVERRIDE is not used, "" is assumed and no override will be # done. # # VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]] # # (Possibly non-existent) environment variables may be used in values # using the ${string} syntax and (possibly non-existent) PAM_ITEMs may # be used in values using the @{string} syntax. Both the $ and @ # characters can be backslash escaped to be used as literal values # values can be delimited with "", escaped " not supported. # Note that many environment variables that you would like to use # may not be set by the time the module is called. # For example, HOME is used below several times, but # many PAM applications don't make it available by the time you need it. # # # First, some special variables # # Set the REMOTEHOST variable for any hosts that are remote, default # to "localhost" rather than not being set at all #REMOTEHOST DEFAULT=localhost OVERRIDE=@{PAM_RHOST} # # Set the DISPLAY variable if it seems reasonable #DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY} # # # Now some simple variables # #PAGER DEFAULT=less #MANPAGER DEFAULT=less #LESS DEFAULT="M q e h15 z23 b80" #NNTPSERVER DEFAULT=localhost #PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\ #:/usr/bin:/usr/local/bin/X11:/usr/bin/X11 # # silly examples of escaped variables, just to show how they work. # #DOLLAR DEFAULT=\$ #DOLLARDOLLAR DEFAULT= OVERRIDE=\$${DOLLAR} #DOLLARPLUS DEFAULT=\${REMOTEHOST}${REMOTEHOST} #ATSIGN DEFAULT="" OVERRIDE=\@ Linux-PAM-1.1.8/modules/pam_env/pam_env.c0000644000000000000000000005704112160065211015011 00000000000000/* pam_env module */ /* * Written by Dave Kinchlea 1997/01/31 * Inspired by Andrew Morgan , who also supplied the * template for this file (via pam_mail) */ #define DEFAULT_ETC_ENVFILE "/etc/environment" #define DEFAULT_READ_ENVFILE 1 #define DEFAULT_USER_ENVFILE ".pam_environment" #define DEFAULT_USER_READ_ENVFILE 1 #include "config.h" #include #include #include #include #include #include #include #include #include #include #include /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #define PAM_SM_AUTH /* This is primarily a AUTH_SETCRED module */ #define PAM_SM_SESSION /* But I like to be friendly */ #define PAM_SM_PASSWORD /* "" */ #define PAM_SM_ACCOUNT /* "" */ #include #include #include #include /* This little structure makes it easier to keep variables together */ typedef struct var { char *name; char *value; char *defval; char *override; } VAR; #define BUF_SIZE 1024 #define MAX_ENV 8192 #define GOOD_LINE 0 #define BAD_LINE 100 /* This must be > the largest PAM_* error code */ #define DEFINE_VAR 101 #define UNDEFINE_VAR 102 #define ILLEGAL_VAR 103 static int _assemble_line(FILE *, char *, int); static int _parse_line(const pam_handle_t *, char *, VAR *); static int _check_var(pam_handle_t *, VAR *); /* This is the real meat */ static void _clean_var(VAR *); static int _expand_arg(pam_handle_t *, char **); static const char * _pam_get_item_byname(pam_handle_t *, const char *); static int _define_var(pam_handle_t *, int, VAR *); static int _undefine_var(pam_handle_t *, int, VAR *); /* This is a flag used to designate an empty string */ static char quote='Z'; /* argument parsing */ #define PAM_DEBUG_ARG 0x01 static int _pam_parse (const pam_handle_t *pamh, int argc, const char **argv, const char **conffile, const char **envfile, int *readenv, const char **user_envfile, int *user_readenv) { int ctrl=0; *user_envfile = DEFAULT_USER_ENVFILE; *envfile = DEFAULT_ETC_ENVFILE; *readenv = DEFAULT_READ_ENVFILE; *user_readenv = DEFAULT_USER_READ_ENVFILE; *conffile = DEFAULT_CONF_FILE; /* step through arguments */ for (; argc-- > 0; ++argv) { /* generic options */ if (!strcmp(*argv,"debug")) ctrl |= PAM_DEBUG_ARG; else if (!strncmp(*argv,"conffile=",9)) { if ((*argv)[9] == '\0') { pam_syslog(pamh, LOG_ERR, "conffile= specification missing argument - ignored"); } else { *conffile = 9+*argv; D(("new Configuration File: %s", *conffile)); } } else if (!strncmp(*argv,"envfile=",8)) { if ((*argv)[8] == '\0') { pam_syslog (pamh, LOG_ERR, "envfile= specification missing argument - ignored"); } else { *envfile = 8+*argv; D(("new Env File: %s", *envfile)); } } else if (!strncmp(*argv,"user_envfile=",13)) { if ((*argv)[13] == '\0') { pam_syslog (pamh, LOG_ERR, "user_envfile= specification missing argument - ignored"); } else { *user_envfile = 13+*argv; D(("new User Env File: %s", *user_envfile)); } } else if (!strncmp(*argv,"readenv=",8)) *readenv = atoi(8+*argv); else if (!strncmp(*argv,"user_readenv=",13)) *user_readenv = atoi(13+*argv); else pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } return ctrl; } static int _parse_config_file(pam_handle_t *pamh, int ctrl, const char *file) { int retval; char buffer[BUF_SIZE]; FILE *conf; VAR Var, *var=&Var; D(("Called.")); var->name=NULL; var->defval=NULL; var->override=NULL; D(("Config file name is: %s", file)); /* * Lets try to open the config file, parse it and process * any variables found. */ if ((conf = fopen(file,"r")) == NULL) { pam_syslog(pamh, LOG_ERR, "Unable to open config file: %s: %m", file); return PAM_IGNORE; } /* _pam_assemble_line will provide a complete line from the config file, * with all comments removed and any escaped newlines fixed up */ while (( retval = _assemble_line(conf, buffer, BUF_SIZE)) > 0) { D(("Read line: %s", buffer)); if ((retval = _parse_line(pamh, buffer, var)) == GOOD_LINE) { retval = _check_var(pamh, var); if (DEFINE_VAR == retval) { retval = _define_var(pamh, ctrl, var); } else if (UNDEFINE_VAR == retval) { retval = _undefine_var(pamh, ctrl, var); } } if (PAM_SUCCESS != retval && ILLEGAL_VAR != retval && BAD_LINE != retval && PAM_BAD_ITEM != retval) break; _clean_var(var); } /* while */ (void) fclose(conf); /* tidy up */ _clean_var(var); /* We could have got here prematurely, * this is safe though */ D(("Exit.")); return (retval != 0 ? PAM_ABORT : PAM_SUCCESS); } static int _parse_env_file(pam_handle_t *pamh, int ctrl, const char *file) { int retval=PAM_SUCCESS, i, t; char buffer[BUF_SIZE], *key, *mark; FILE *conf; D(("Env file name is: %s", file)); if ((conf = fopen(file,"r")) == NULL) { pam_syslog(pamh, LOG_ERR, "Unable to open env file: %s: %m", file); return PAM_IGNORE; } while (_assemble_line(conf, buffer, BUF_SIZE) > 0) { D(("Read line: %s", buffer)); key = buffer; /* skip leading white space */ key += strspn(key, " \n\t"); /* skip blanks lines and comments */ if (key[0] == '#') continue; /* skip over "export " if present so we can be compat with bash type declarations */ if (strncmp(key, "export ", (size_t) 7) == 0) key += 7; /* now find the end of value */ mark = key; while(mark[0] != '\n' && mark[0] != '#' && mark[0] != '\0') mark++; if (mark[0] != '\0') mark[0] = '\0'; /* * sanity check, the key must be alpha-numeric */ for ( i = 0 ; key[i] != '=' && key[i] != '\0' ; i++ ) if (!isalnum(key[i]) && key[i] != '_') { pam_syslog(pamh, LOG_ERR, "non-alphanumeric key '%s' in %s', ignoring", key, file); break; } /* non-alphanumeric key, ignore this line */ if (key[i] != '=' && key[i] != '\0') continue; /* now we try to be smart about quotes around the value, but not too smart, we can't get all fancy with escaped values like bash */ if (key[i] == '=' && (key[++i] == '\"' || key[i] == '\'')) { for ( t = i+1 ; key[t] != '\0' ; t++) if (key[t] != '\"' && key[t] != '\'') key[i++] = key[t]; else if (key[t+1] != '\0') key[i++] = key[t]; key[i] = '\0'; } /* if this is a request to delete a variable, check that it's actually set first, so we don't get a vague error back from pam_putenv() */ for (i = 0; key[i] != '=' && key[i] != '\0'; i++); if (key[i] == '\0' && !pam_getenv(pamh,key)) continue; /* set the env var, if it fails, we break out of the loop */ retval = pam_putenv(pamh, key); if (retval != PAM_SUCCESS) { D(("error setting env \"%s\"", key)); break; } else if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "pam_putenv(\"%s\")", key); } } (void) fclose(conf); /* tidy up */ D(("Exit.")); return retval; } /* * This is where we read a line of the PAM config file. The line may be * preceeded by lines of comments and also extended with "\\\n" */ static int _assemble_line(FILE *f, char *buffer, int buf_len) { char *p = buffer; char *s, *os; int used = 0; int whitespace; /* loop broken with a 'break' when a non-'\\n' ended line is read */ D(("called.")); for (;;) { if (used >= buf_len) { /* Overflow */ D(("_assemble_line: overflow")); return -1; } if (fgets(p, buf_len - used, f) == NULL) { if (used) { /* Incomplete read */ return -1; } else { /* EOF */ return 0; } } /* skip leading spaces --- line may be blank */ whitespace = strspn(p, " \n\t"); s = p + whitespace; if (*s && (*s != '#')) { used += whitespace; os = s; /* * we are only interested in characters before the first '#' * character */ while (*s && *s != '#') ++s; if (*s == '#') { *s = '\0'; used += strlen(os); break; /* the line has been read */ } s = os; /* * Check for backslash by scanning back from the end of * the entered line, the '\n' has been included since * normally a line is terminated with this * character. fgets() should only return one though! */ s += strlen(s); while (s > os && ((*--s == ' ') || (*s == '\t') || (*s == '\n'))); /* check if it ends with a backslash */ if (*s == '\\') { *s = '\0'; /* truncate the line here */ used += strlen(os); p = s; /* there is more ... */ } else { /* End of the line! */ used += strlen(os); break; /* this is the complete line */ } } else { /* Nothing in this line */ /* Don't move p */ } } return used; } static int _parse_line (const pam_handle_t *pamh, char *buffer, VAR *var) { /* * parse buffer into var, legal syntax is * VARIABLE [DEFAULT=[[string]] [OVERRIDE=[value]] * * Any other options defined make this a bad line, * error logged and no var set */ int length, quoteflg=0; char *ptr, **valptr, *tmpptr; D(("Called buffer = <%s>", buffer)); length = strcspn(buffer," \t\n"); if ((var->name = malloc(length + 1)) == NULL) { pam_syslog(pamh, LOG_ERR, "Couldn't malloc %d bytes", length+1); return PAM_BUF_ERR; } /* * The first thing on the line HAS to be the variable name, * it may be the only thing though. */ strncpy(var->name, buffer, length); var->name[length] = '\0'; D(("var->name = <%s>, length = %d", var->name, length)); /* * Now we check for arguments, we only support two kinds and ('cause I am lazy) * each one can actually be listed any number of times */ ptr = buffer+length; while ((length = strspn(ptr, " \t")) > 0) { ptr += length; /* remove leading whitespace */ D((ptr)); if (strncmp(ptr,"DEFAULT=",8) == 0) { ptr+=8; D(("Default arg found: <%s>", ptr)); valptr=&(var->defval); } else if (strncmp(ptr, "OVERRIDE=", 9) == 0) { ptr+=9; D(("Override arg found: <%s>", ptr)); valptr=&(var->override); } else { D(("Unrecognized options: <%s> - ignoring line", ptr)); pam_syslog(pamh, LOG_ERR, "Unrecognized Option: %s - ignoring line", ptr); return BAD_LINE; } if ('"' != *ptr) { /* Escaped quotes not supported */ length = strcspn(ptr, " \t\n"); tmpptr = ptr+length; } else { tmpptr = strchr(++ptr, '"'); if (!tmpptr) { D(("Unterminated quoted string: %s", ptr-1)); pam_syslog(pamh, LOG_ERR, "Unterminated quoted string: %s", ptr-1); return BAD_LINE; } length = tmpptr - ptr; if (*++tmpptr && ' ' != *tmpptr && '\t' != *tmpptr && '\n' != *tmpptr) { D(("Quotes must cover the entire string: <%s>", ptr)); pam_syslog(pamh, LOG_ERR, "Quotes must cover the entire string: <%s>", ptr); return BAD_LINE; } quoteflg++; } if (length) { if ((*valptr = malloc(length + 1)) == NULL) { D(("Couldn't malloc %d bytes", length+1)); pam_syslog(pamh, LOG_ERR, "Couldn't malloc %d bytes", length+1); return PAM_BUF_ERR; } (void)strncpy(*valptr,ptr,length); (*valptr)[length]='\0'; } else if (quoteflg--) { *valptr = "e; /* a quick hack to handle the empty string */ } ptr = tmpptr; /* Start the search where we stopped */ } /* while */ /* * The line is parsed, all is well. */ D(("Exit.")); ptr = NULL; tmpptr = NULL; valptr = NULL; return GOOD_LINE; } static int _check_var(pam_handle_t *pamh, VAR *var) { /* * Examine the variable and determine what action to take. * Returns DEFINE_VAR, UNDEFINE_VAR depending on action to take * or a PAM_* error code if passed back from other routines * * if no DEFAULT provided, the empty string is assumed * if no OVERRIDE provided, the empty string is assumed * if DEFAULT= and OVERRIDE evaluates to the empty string, * this variable should be undefined * if DEFAULT="" and OVERRIDE evaluates to the empty string, * this variable should be defined with no value * if OVERRIDE=value and value turns into the empty string, DEFAULT is used * * If DEFINE_VAR is to be returned, the correct value to define will * be pointed to by var->value */ int retval; D(("Called.")); /* * First thing to do is to expand any arguments, but only * if they are not the special quote values (cause expand_arg * changes memory). */ if (var->defval && ("e != var->defval) && ((retval = _expand_arg(pamh, &(var->defval))) != PAM_SUCCESS)) { return retval; } if (var->override && ("e != var->override) && ((retval = _expand_arg(pamh, &(var->override))) != PAM_SUCCESS)) { return retval; } /* Now its easy */ if (var->override && *(var->override) && "e != var->override) { /* if there is a non-empty string in var->override, we use it */ D(("OVERRIDE variable <%s> being used: <%s>", var->name, var->override)); var->value = var->override; retval = DEFINE_VAR; } else { var->value = var->defval; if ("e == var->defval) { /* * This means that the empty string was given for defval value * which indicates that a variable should be defined with no value */ *var->defval = '\0'; D(("An empty variable: <%s>", var->name)); retval = DEFINE_VAR; } else if (var->defval) { D(("DEFAULT variable <%s> being used: <%s>", var->name, var->defval)); retval = DEFINE_VAR; } else { D(("UNDEFINE variable <%s>", var->name)); retval = UNDEFINE_VAR; } } D(("Exit.")); return retval; } static int _expand_arg(pam_handle_t *pamh, char **value) { const char *orig=*value, *tmpptr=NULL; char *ptr; /* * Sure would be nice to use tmpptr but it needs to be * a constant so that the compiler will shut up when I * call pam_getenv and _pam_get_item_byname -- sigh */ /* No unexpanded variable can be bigger than BUF_SIZE */ char type, tmpval[BUF_SIZE]; /* I know this shouldn't be hard-coded but it's so much easier this way */ char tmp[MAX_ENV]; D(("Remember to initialize tmp!")); memset(tmp, 0, MAX_ENV); /* * (possibly non-existent) environment variables can be used as values * by prepending a "$" and wrapping in {} (ie: ${HOST}), can escape with "\" * (possibly non-existent) PAM items can be used as values * by prepending a "@" and wrapping in {} (ie: @{PAM_RHOST}, can escape * */ D(("Expanding <%s>",orig)); while (*orig) { /* while there is some input to deal with */ if ('\\' == *orig) { ++orig; if ('$' != *orig && '@' != *orig) { D(("Unrecognized escaped character: <%c> - ignoring", *orig)); pam_syslog(pamh, LOG_ERR, "Unrecognized escaped character: <%c> - ignoring", *orig); } else if ((strlen(tmp) + 1) < MAX_ENV) { tmp[strlen(tmp)] = *orig++; /* Note the increment */ } else { /* is it really a good idea to try to log this? */ D(("Variable buffer overflow: <%s> + <%s>", tmp, tmpptr)); pam_syslog (pamh, LOG_ERR, "Variable buffer overflow: <%s> + <%s>", tmp, tmpptr); return PAM_BUF_ERR; } continue; } if ('$' == *orig || '@' == *orig) { if ('{' != *(orig+1)) { D(("Expandable variables must be wrapped in {}" " <%s> - ignoring", orig)); pam_syslog(pamh, LOG_ERR, "Expandable variables must be wrapped in {}" " <%s> - ignoring", orig); if ((strlen(tmp) + 1) < MAX_ENV) { tmp[strlen(tmp)] = *orig++; /* Note the increment */ } continue; } else { D(("Expandable argument: <%s>", orig)); type = *orig; orig+=2; /* skip the ${ or @{ characters */ ptr = strchr(orig, '}'); if (ptr) { *ptr++ = '\0'; } else { D(("Unterminated expandable variable: <%s>", orig-2)); pam_syslog(pamh, LOG_ERR, "Unterminated expandable variable: <%s>", orig-2); return PAM_ABORT; } strncpy(tmpval, orig, sizeof(tmpval)); tmpval[sizeof(tmpval)-1] = '\0'; orig=ptr; /* * so, we know we need to expand tmpval, it is either * an environment variable or a PAM_ITEM. type will tell us which */ switch (type) { case '$': D(("Expanding env var: <%s>",tmpval)); tmpptr = pam_getenv(pamh, tmpval); D(("Expanded to <%s>", tmpptr)); break; case '@': D(("Expanding pam item: <%s>",tmpval)); tmpptr = _pam_get_item_byname(pamh, tmpval); D(("Expanded to <%s>", tmpptr)); break; default: D(("Impossible error, type == <%c>", type)); pam_syslog(pamh, LOG_CRIT, "Impossible error, type == <%c>", type); return PAM_ABORT; } /* switch */ if (tmpptr) { if ((strlen(tmp) + strlen(tmpptr)) < MAX_ENV) { strcat(tmp, tmpptr); } else { /* is it really a good idea to try to log this? */ D(("Variable buffer overflow: <%s> + <%s>", tmp, tmpptr)); pam_syslog (pamh, LOG_ERR, "Variable buffer overflow: <%s> + <%s>", tmp, tmpptr); return PAM_BUF_ERR; } } } /* if ('{' != *orig++) */ } else { /* if ( '$' == *orig || '@' == *orig) */ if ((strlen(tmp) + 1) < MAX_ENV) { tmp[strlen(tmp)] = *orig++; /* Note the increment */ } else { /* is it really a good idea to try to log this? */ D(("Variable buffer overflow: <%s> + <%s>", tmp, tmpptr)); pam_syslog(pamh, LOG_ERR, "Variable buffer overflow: <%s> + <%s>", tmp, tmpptr); return PAM_BUF_ERR; } } } /* for (;*orig;) */ if (strlen(tmp) > strlen(*value)) { free(*value); if ((*value = malloc(strlen(tmp) +1)) == NULL) { D(("Couldn't malloc %d bytes for expanded var", strlen(tmp)+1)); pam_syslog (pamh, LOG_ERR, "Couldn't malloc %lu bytes for expanded var", (unsigned long)strlen(tmp)+1); return PAM_BUF_ERR; } } strcpy(*value, tmp); memset(tmp,'\0',sizeof(tmp)); D(("Exit.")); return PAM_SUCCESS; } static const char * _pam_get_item_byname(pam_handle_t *pamh, const char *name) { /* * This function just allows me to use names as given in the config * file and translate them into the appropriate PAM_ITEM macro */ int item; const void *itemval; D(("Called.")); if (strcmp(name, "PAM_USER") == 0) { item = PAM_USER; } else if (strcmp(name, "PAM_USER_PROMPT") == 0) { item = PAM_USER_PROMPT; } else if (strcmp(name, "PAM_TTY") == 0) { item = PAM_TTY; } else if (strcmp(name, "PAM_RUSER") == 0) { item = PAM_RUSER; } else if (strcmp(name, "PAM_RHOST") == 0) { item = PAM_RHOST; } else { D(("Unknown PAM_ITEM: <%s>", name)); pam_syslog (pamh, LOG_ERR, "Unknown PAM_ITEM: <%s>", name); return NULL; } if (pam_get_item(pamh, item, &itemval) != PAM_SUCCESS) { D(("pam_get_item failed")); return NULL; /* let pam_get_item() log the error */ } D(("Exit.")); return itemval; } static int _define_var(pam_handle_t *pamh, int ctrl, VAR *var) { /* We have a variable to define, this is a simple function */ char *envvar; int retval = PAM_SUCCESS; D(("Called.")); if (asprintf(&envvar, "%s=%s", var->name, var->value) < 0) { pam_syslog(pamh, LOG_ERR, "out of memory"); return PAM_BUF_ERR; } retval = pam_putenv(pamh, envvar); if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "pam_putenv(\"%s\")", envvar); } _pam_drop(envvar); D(("Exit.")); return retval; } static int _undefine_var(pam_handle_t *pamh, int ctrl, VAR *var) { /* We have a variable to undefine, this is a simple function */ D(("Called and exit.")); if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_DEBUG, "remove variable \"%s\"", var->name); } return pam_putenv(pamh, var->name); } static void _clean_var(VAR *var) { if (var->name) { free(var->name); } if (var->defval && ("e != var->defval)) { free(var->defval); } if (var->override && ("e != var->override)) { free(var->override); } var->name = NULL; var->value = NULL; /* never has memory specific to it */ var->defval = NULL; var->override = NULL; return; } /* --- authentication management functions (only) --- */ PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_IGNORE; } static int handle_env (pam_handle_t *pamh, int argc, const char **argv) { int retval, ctrl, readenv=DEFAULT_READ_ENVFILE; int user_readenv = DEFAULT_USER_READ_ENVFILE; const char *conf_file = NULL, *env_file = NULL, *user_env_file = NULL; /* * this module sets environment variables read in from a file */ D(("Called.")); ctrl = _pam_parse(pamh, argc, argv, &conf_file, &env_file, &readenv, &user_env_file, &user_readenv); retval = _parse_config_file(pamh, ctrl, conf_file); if(readenv && retval == PAM_SUCCESS) { retval = _parse_env_file(pamh, ctrl, env_file); if (retval == PAM_IGNORE) retval = PAM_SUCCESS; } if(user_readenv && retval == PAM_SUCCESS) { char *envpath = NULL; struct passwd *user_entry = NULL; const char *username; struct stat statbuf; username = _pam_get_item_byname(pamh, "PAM_USER"); if (username) user_entry = pam_modutil_getpwnam (pamh, username); if (!user_entry) { pam_syslog(pamh, LOG_ERR, "No such user!?"); } else { if (asprintf(&envpath, "%s/%s", user_entry->pw_dir, user_env_file) < 0) { pam_syslog(pamh, LOG_ERR, "Out of memory"); return PAM_BUF_ERR; } if (stat(envpath, &statbuf) == 0) { PAM_MODUTIL_DEF_PRIVS(privs); if (pam_modutil_drop_priv(pamh, &privs, user_entry)) { retval = PAM_SESSION_ERR; } else { retval = _parse_config_file(pamh, ctrl, envpath); if (pam_modutil_regain_priv(pamh, &privs)) retval = PAM_SESSION_ERR; } if (retval == PAM_IGNORE) retval = PAM_SUCCESS; } free(envpath); } } /* indicate success or failure */ D(("Exit.")); return retval; } PAM_EXTERN int pam_sm_acct_mgmt (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { pam_syslog (pamh, LOG_NOTICE, "pam_sm_acct_mgmt called inappropriately"); return PAM_SERVICE_ERR; } PAM_EXTERN int pam_sm_setcred (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { D(("Called")); return handle_env (pamh, argc, argv); } PAM_EXTERN int pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { D(("Called")); return handle_env (pamh, argc, argv); } PAM_EXTERN int pam_sm_close_session (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { D(("Called and Exit")); return PAM_SUCCESS; } PAM_EXTERN int pam_sm_chauthtok (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { pam_syslog (pamh, LOG_NOTICE, "pam_sm_chauthtok called inappropriately"); return PAM_SERVICE_ERR; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_env_modstruct = { "pam_env", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, pam_sm_chauthtok, }; #endif /* end of module definition */ Linux-PAM-1.1.8/modules/pam_env/README.xml0000644000000000000000000000200412160065211014664 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_env.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_env-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_env/pam_env.80000644000000000000000000001003112216527574014743 00000000000000'\" t .\" Title: pam_env .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_ENV" "8" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_env \- PAM module to set/unset environment variables .SH "SYNOPSIS" .HP \w'\fBpam_env\&.so\fR\ 'u \fBpam_env\&.so\fR [debug] [conffile=\fIconf\-file\fR] [envfile=\fIenv\-file\fR] [readenv=\fI0|1\fR] [user_envfile=\fIenv\-file\fR] [user_readenv=\fI0|1\fR] .SH "DESCRIPTION" .PP The pam_env PAM module allows the (un)setting of environment variables\&. Supported is the use of previously set environment variables as well as \fIPAM_ITEM\fRs such as \fIPAM_RHOST\fR\&. .PP By default rules for (un)setting of variables is taken from the config file /etc/security/pam_env\&.conf if no other file is specified\&. .PP This module can also parse a file with simple \fIKEY=VAL\fR pairs on separate lines (/etc/environment by default)\&. You can change the default file to parse, with the \fIenvfile\fR flag and turn it on or off by setting the \fIreadenv\fR flag to 1 or 0 respectively\&. .PP Since setting of PAM environment variables can have side effects to other modules, this module should be the last one on the stack\&. .SH "OPTIONS" .PP \fBconffile=\fR\fB\fI/path/to/pam_env\&.conf\fR\fR .RS 4 Indicate an alternative pam_env\&.conf style configuration file to override the default\&. This can be useful when different services need different environments\&. .RE .PP \fBdebug\fR .RS 4 A lot of debug information is printed with \fBsyslog\fR(3)\&. .RE .PP \fBenvfile=\fR\fB\fI/path/to/environment\fR\fR .RS 4 Indicate an alternative environment file to override the default\&. This can be useful when different services need different environments\&. .RE .PP \fBreadenv=\fR\fB\fI0|1\fR\fR .RS 4 Turns on or off the reading of the file specified by envfile (0 is off, 1 is on)\&. By default this option is on\&. .RE .PP \fBuser_envfile=\fR\fB\fIfilename\fR\fR .RS 4 Indicate an alternative \&.pam_environment file to override the default\&. This can be useful when different services need different environments\&. The filename is relative to the user home directory\&. .RE .PP \fBuser_readenv=\fR\fB\fI0|1\fR\fR .RS 4 Turns on or off the reading of the user specific environment file\&. 0 is off, 1 is on\&. By default this option is on\&. .RE .SH "MODULE TYPES PROVIDED" .PP The \fBauth\fR and \fBsession\fR module types are provided\&. .SH "RETURN VALUES" .PP PAM_ABORT .RS 4 Not all relevant data or options could be gotten\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_IGNORE .RS 4 No pam_env\&.conf and environment file was found\&. .RE .PP PAM_SUCCESS .RS 4 Environment variables were set\&. .RE .SH "FILES" .PP /etc/security/pam_env\&.conf .RS 4 Default configuration file .RE .PP /etc/environment .RS 4 Default environment file .RE .PP $HOME/\&.pam_environment .RS 4 User specific environment file .RE .SH "SEE ALSO" .PP \fBpam_env.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8)\&. .SH "AUTHOR" .PP pam_env was written by Dave Kinchlea \&. Linux-PAM-1.1.8/modules/pam_env/pam_env.8.xml0000644000000000000000000001622212160065211015531 00000000000000 pam_env 8 Linux-PAM Manual pam_env PAM module to set/unset environment variables pam_env.so debug conffile=conf-file envfile=env-file readenv=0|1 user_envfile=env-file user_readenv=0|1 DESCRIPTION The pam_env PAM module allows the (un)setting of environment variables. Supported is the use of previously set environment variables as well as PAM_ITEMs such as PAM_RHOST. By default rules for (un)setting of variables is taken from the config file /etc/security/pam_env.conf if no other file is specified. This module can also parse a file with simple KEY=VAL pairs on separate lines (/etc/environment by default). You can change the default file to parse, with the envfile flag and turn it on or off by setting the readenv flag to 1 or 0 respectively. Since setting of PAM environment variables can have side effects to other modules, this module should be the last one on the stack. OPTIONS Indicate an alternative pam_env.conf style configuration file to override the default. This can be useful when different services need different environments. A lot of debug information is printed with syslog3. Indicate an alternative environment file to override the default. This can be useful when different services need different environments. Turns on or off the reading of the file specified by envfile (0 is off, 1 is on). By default this option is on. Indicate an alternative .pam_environment file to override the default. This can be useful when different services need different environments. The filename is relative to the user home directory. Turns on or off the reading of the user specific environment file. 0 is off, 1 is on. By default this option is on. MODULE TYPES PROVIDED The and module types are provided. RETURN VALUES PAM_ABORT Not all relevant data or options could be gotten. PAM_BUF_ERR Memory buffer error. PAM_IGNORE No pam_env.conf and environment file was found. PAM_SUCCESS Environment variables were set. FILES /etc/security/pam_env.conf Default configuration file /etc/environment Default environment file $HOME/.pam_environment User specific environment file SEE ALSO pam_env.conf5 , pam.d5 , pam8 . AUTHOR pam_env was written by Dave Kinchlea <kinch@kinch.ark.com>. Linux-PAM-1.1.8/modules/pam_permit/0000755000000000000000000000000012216542311014004 500000000000000Linux-PAM-1.1.8/modules/pam_permit/pam_permit.c0000644000000000000000000000477412160065211016236 00000000000000/* pam_permit module */ /* * $Id$ * * Written by Andrew Morgan 1996/3/11 * */ #include "config.h" #define DEFAULT_USER "nobody" #include /* * here, we make definitions for the externally accessible functions * in this file (these definitions are required for static modules * but strongly encouraged generally) they are used to instruct the * modules include file to define their prototypes. */ #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #define PAM_SM_SESSION #define PAM_SM_PASSWORD #include #include /* --- authentication management functions --- */ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { int retval; const char *user=NULL; /* * authentication requires we know who the user wants to be */ retval = pam_get_user(pamh, &user, NULL); if (retval != PAM_SUCCESS) { D(("get user returned error: %s", pam_strerror(pamh,retval))); return retval; } if (user == NULL || *user == '\0') { D(("username not known")); retval = pam_set_item(pamh, PAM_USER, (const void *) DEFAULT_USER); if (retval != PAM_SUCCESS) return PAM_USER_UNKNOWN; } user = NULL; /* clean up */ return PAM_SUCCESS; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } /* --- account management functions --- */ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } /* --- password management --- */ PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } /* --- session management --- */ PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } /* end of module definition */ #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_permit_modstruct = { "pam_permit", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, pam_sm_chauthtok }; #endif Linux-PAM-1.1.8/modules/pam_permit/tst-pam_permit0000755000000000000000000000006512160065211016615 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_permit.so Linux-PAM-1.1.8/modules/pam_permit/Makefile.am0000644000000000000000000000134612160065211015761 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_permit man_MANS = pam_permit.8 XMLS = README.xml pam_permit.8.xml TESTS = tst-pam_permit securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_permit.la pam_permit_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_permit.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_permit/README0000644000000000000000000000161312216527605014616 00000000000000pam_permit — The promiscuous module ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_permit is a PAM module that always permit access. It does nothing else. In the case of authentication, the user's name will be set to nobody if the application didn't set one. Many applications and PAM modules become confused if this name is unknown. This module is very dangerous. It should be used with extreme caution. OPTIONS This module does not recognise any options. EXAMPLES Add this line to your other login entries to disable account management, but continue to permit users to log in. account required pam_permit.so AUTHOR pam_permit was written by Andrew G. Morgan, . Linux-PAM-1.1.8/modules/pam_permit/pam_permit.8.xml0000644000000000000000000000545512160065211016757 00000000000000 pam_permit 8 Linux-PAM Manual pam_permit The promiscuous module pam_permit.so DESCRIPTION pam_permit is a PAM module that always permit access. It does nothing else. In the case of authentication, the user's name will be set to nobody if the application didn't set one. Many applications and PAM modules become confused if this name is unknown. This module is very dangerous. It should be used with extreme caution. OPTIONS This module does not recognise any options. MODULE TYPES PROVIDED The , , and module types are provided. RETURN VALUES PAM_SUCCESS This module always returns this value. EXAMPLES Add this line to your other login entries to disable account management, but continue to permit users to log in. account required pam_permit.so SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_permit was written by Andrew G. Morgan, <morgan@kernel.org>. Linux-PAM-1.1.8/modules/pam_permit/Makefile.in0000644000000000000000000006012112216527537016006 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_permit DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_permit_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_permit_la_SOURCES = pam_permit.c pam_permit_la_OBJECTS = pam_permit.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_permit.c DIST_SOURCES = pam_permit.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_permit man_MANS = pam_permit.8 XMLS = README.xml pam_permit.8.xml TESTS = tst-pam_permit securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_permit.la pam_permit_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_permit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_permit/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_permit.la: $(pam_permit_la_OBJECTS) $(pam_permit_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_permit_la_OBJECTS) $(pam_permit_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_permit.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_permit.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_permit/README.xml0000644000000000000000000000221512160065211015400 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_permit.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_permit-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_permit/pam_permit.80000644000000000000000000000452612216527605016172 00000000000000'\" t .\" Title: pam_permit .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_PERMIT" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_permit \- The promiscuous module .SH "SYNOPSIS" .HP \w'\fBpam_permit\&.so\fR\ 'u \fBpam_permit\&.so\fR .SH "DESCRIPTION" .PP pam_permit is a PAM module that always permit access\&. It does nothing else\&. .PP In the case of authentication, the user\*(Aqs name will be set to \fInobody\fR if the application didn\*(Aqt set one\&. Many applications and PAM modules become confused if this name is unknown\&. .PP This module is very dangerous\&. It should be used with extreme caution\&. .SH "OPTIONS" .PP This module does not recognise any options\&. .SH "MODULE TYPES PROVIDED" .PP The \fBauth\fR, \fBaccount\fR, \fBpassword\fR and \fBsession\fR module types are provided\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 This module always returns this value\&. .RE .SH "EXAMPLES" .PP Add this line to your other login entries to disable account management, but continue to permit users to log in\&. .sp .if n \{\ .RS 4 .\} .nf account required pam_permit\&.so .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_permit was written by Andrew G\&. Morgan, \&. Linux-PAM-1.1.8/modules/pam_debug/0000755000000000000000000000000012216542310013571 500000000000000Linux-PAM-1.1.8/modules/pam_debug/pam_debug.c0000644000000000000000000000723612160065211015606 00000000000000/* pam_permit module */ /* * $Id$ * * Written by Andrew Morgan 2001/02/04 * */ #define DEFAULT_USER "nobody" #include "config.h" #include /* * This module is intended as a debugging aide for determining how * the PAM stack is operating. * * here, we make definitions for the externally accessible functions * in this file (these definitions are required for static modules * but strongly encouraged generally) they are used to instruct the * modules include file to define their prototypes. */ #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #define PAM_SM_SESSION #define PAM_SM_PASSWORD #include #include #include #define _PAM_ACTION_UNDEF (-10) #include "../../libpam/pam_tokens.h" /* --- authentication management functions --- */ static int state(pam_handle_t *pamh, const char *text) { int retval; retval = pam_info (pamh, "%s", text); if (retval != PAM_SUCCESS) { D(("pam_info failed")); } return retval; } static int parse_args(int retval, const char *event, pam_handle_t *pamh, int argc, const char **argv) { int i; for (i=0; i .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_DEBUG" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_debug \- PAM module to debug the PAM stack .SH "SYNOPSIS" .HP \w'\fBpam_debug\&.so\fR\ 'u \fBpam_debug\&.so\fR [auth=\fIvalue\fR] [cred=\fIvalue\fR] [acct=\fIvalue\fR] [prechauthtok=\fIvalue\fR] [chauthtok=\fIvalue\fR] [auth=\fIvalue\fR] [open_session=\fIvalue\fR] [close_session=\fIvalue\fR] .SH "DESCRIPTION" .PP The pam_debug PAM module is intended as a debugging aide for determining how the PAM stack is operating\&. This module returns what its module arguments tell it to return\&. .SH "OPTIONS" .PP \fBauth=\fR\fB\fIvalue\fR\fR .RS 4 The \fBpam_sm_authenticate\fR(3) function will return \fIvalue\fR\&. .RE .PP \fBcred=\fR\fB\fIvalue\fR\fR .RS 4 The \fBpam_sm_setcred\fR(3) function will return \fIvalue\fR\&. .RE .PP \fBacct=\fR\fB\fIvalue\fR\fR .RS 4 The \fBpam_sm_acct_mgmt\fR(3) function will return \fIvalue\fR\&. .RE .PP \fBprechauthtok=\fR\fB\fIvalue\fR\fR .RS 4 The \fBpam_sm_chauthtok\fR(3) function will return \fIvalue\fR if the \fIPAM_PRELIM_CHECK\fR flag is set\&. .RE .PP \fBchauthtok=\fR\fB\fIvalue\fR\fR .RS 4 The \fBpam_sm_chauthtok\fR(3) function will return \fIvalue\fR if the \fIPAM_PRELIM_CHECK\fR flag is \fBnot\fR set\&. .RE .PP \fBopen_session=\fR\fB\fIvalue\fR\fR .RS 4 The \fBpam_sm_open_session\fR(3) function will return \fIvalue\fR\&. .RE .PP \fBclose_session=\fR\fB\fIvalue\fR\fR .RS 4 The \fBpam_sm_close_session\fR(3) function will return \fIvalue\fR\&. .RE .PP Where \fIvalue\fR can be one of: success, open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy, authtok_disable_aging, try_again, ignore, abort, authtok_expired, module_unknown, bad_item, conv_again, incomplete\&. .SH "MODULE TYPES PROVIDED" .PP All module types (\fBauth\fR, \fBaccount\fR, \fBpassword\fR and \fBsession\fR) are provided\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 Default return code if no other value was specified, else specified return value\&. .RE .SH "EXAMPLES" .sp .if n \{\ .RS 4 .\} .nf auth requisite pam_permit\&.so auth [success=2 default=ok] pam_debug\&.so auth=perm_denied cred=success auth [default=reset] pam_debug\&.so auth=success cred=perm_denied auth [success=done default=die] pam_debug\&.so auth optional pam_debug\&.so auth=perm_denied cred=perm_denied auth sufficient pam_debug\&.so auth=success cred=success .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_debug was written by Andrew G\&. Morgan \&. Linux-PAM-1.1.8/modules/pam_debug/Makefile.am0000644000000000000000000000134312160065211015544 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_debug man_MANS = pam_debug.8 XMLS = README.xml pam_debug.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_debug.la pam_debug_la_LIBADD = $(top_builddir)/libpam/libpam.la TESTS = tst-pam_debug if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_debug.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_debug/tst-pam_debug0000755000000000000000000000006412160065211016170 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_debug.so Linux-PAM-1.1.8/modules/pam_debug/README0000644000000000000000000000371312216527572014412 00000000000000pam_debug — PAM module to debug the PAM stack ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_debug PAM module is intended as a debugging aide for determining how the PAM stack is operating. This module returns what its module arguments tell it to return. OPTIONS auth=value The pam_sm_authenticate(3) function will return value. cred=value The pam_sm_setcred(3) function will return value. acct=value The pam_sm_acct_mgmt(3) function will return value. prechauthtok=value The pam_sm_chauthtok(3) function will return value if the PAM_PRELIM_CHECK flag is set. chauthtok=value The pam_sm_chauthtok(3) function will return value if the PAM_PRELIM_CHECK flag is not set. open_session=value The pam_sm_open_session(3) function will return value. close_session=value The pam_sm_close_session(3) function will return value. Where value can be one of: success, open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy, authtok_disable_aging, try_again, ignore, abort, authtok_expired, module_unknown, bad_item, conv_again, incomplete. EXAMPLES auth requisite pam_permit.so auth [success=2 default=ok] pam_debug.so auth=perm_denied cred=success auth [default=reset] pam_debug.so auth=success cred=perm_denied auth [success=done default=die] pam_debug.so auth optional pam_debug.so auth=perm_denied cred=perm_denied auth sufficient pam_debug.so auth=success cred=success AUTHOR pam_debug was written by Andrew G. Morgan . Linux-PAM-1.1.8/modules/pam_debug/Makefile.in0000644000000000000000000006007512216527535015602 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_debug DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_debug_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_debug_la_SOURCES = pam_debug.c pam_debug_la_OBJECTS = pam_debug.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_debug.c DIST_SOURCES = pam_debug.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_debug man_MANS = pam_debug.8 XMLS = README.xml pam_debug.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_debug.la pam_debug_la_LIBADD = $(top_builddir)/libpam/libpam.la TESTS = tst-pam_debug @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_debug/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_debug/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_debug.la: $(pam_debug_la_OBJECTS) $(pam_debug_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_debug_la_OBJECTS) $(pam_debug_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_debug.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_debug.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_debug/pam_debug.8.xml0000644000000000000000000001611212160065211016323 00000000000000 pam_debug 8 Linux-PAM Manual pam_debug PAM module to debug the PAM stack pam_debug.so auth=value cred=value acct=value prechauthtok=value chauthtok=value auth=value open_session=value close_session=value DESCRIPTION The pam_debug PAM module is intended as a debugging aide for determining how the PAM stack is operating. This module returns what its module arguments tell it to return. OPTIONS The pam_sm_authenticate3 function will return value. The pam_sm_setcred3 function will return value. The pam_sm_acct_mgmt3 function will return value. The pam_sm_chauthtok3 function will return value if the PAM_PRELIM_CHECK flag is set. The pam_sm_chauthtok3 function will return value if the PAM_PRELIM_CHECK flag is not set. The pam_sm_open_session3 function will return value. The pam_sm_close_session3 function will return value. Where value can be one of: success, open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy, authtok_disable_aging, try_again, ignore, abort, authtok_expired, module_unknown, bad_item, conv_again, incomplete. MODULE TYPES PROVIDED All module types (, , and ) are provided. RETURN VALUES PAM_SUCCESS Default return code if no other value was specified, else specified return value. EXAMPLES auth requisite pam_permit.so auth [success=2 default=ok] pam_debug.so auth=perm_denied cred=success auth [default=reset] pam_debug.so auth=success cred=perm_denied auth [success=done default=die] pam_debug.so auth optional pam_debug.so auth=perm_denied cred=perm_denied auth sufficient pam_debug.so auth=success cred=success SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_debug was written by Andrew G. Morgan <morgan@kernel.org>. Linux-PAM-1.1.8/modules/pam_debug/README.xml0000644000000000000000000000220212160065211015162 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_debug.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_debug-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_tally/0000755000000000000000000000000012216542312013632 500000000000000Linux-PAM-1.1.8/modules/pam_tally/tst-pam_tally0000755000000000000000000000006412160065211016266 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_tally.so Linux-PAM-1.1.8/modules/pam_tally/pam_tally_app.c0000644000000000000000000000014212160065211016531 00000000000000/* # This seemed like such a good idea at the time. :) */ #define MAIN #include "pam_tally.c" Linux-PAM-1.1.8/modules/pam_tally/faillog.h0000644000000000000000000000430112160065211015332 00000000000000/* * Copyright 1989 - 1994, Julianne Frances Haugh * 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. */ /* * faillog.h - login failure logging file format * * $Id$ * * The login failure file is maintained by login(1) and faillog(8) * Each record in the file represents a separate UID and the file * is indexed in that fashion. */ #ifndef _FAILLOG_H #define _FAILLOG_H struct faillog { short fail_cnt; /* failures since last success */ short fail_max; /* failures before turning account off */ char fail_line[12]; /* last failure occured here */ time_t fail_time; /* last failure occured then */ /* * If nonzero, the account will be re-enabled if there are no * failures for fail_locktime seconds since last failure. */ long fail_locktime; }; #endif Linux-PAM-1.1.8/modules/pam_tally/pam_tally.8.xml0000644000000000000000000003520612160065211016426 00000000000000 pam_tally 8 Linux-PAM Manual pam_tally The login counter (tallying) module pam_tally.so file=/path/to/counter onerr=[fail|succeed] magic_root even_deny_root_account deny=n lock_time=n unlock_time=n per_user no_lock_time no_reset audit silent no_log_info pam_tally --file /path/to/counter --user username --reset[=n] --quiet DESCRIPTION This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail. pam_tally has several limitations, which are solved with pam_tally2. For this reason pam_tally is deprecated and will be removed in a future release. pam_tally comes in two parts: pam_tally.so and pam_tally. The former is the PAM module and the latter, a stand-alone program. pam_tally is an (optional) application which can be used to interrogate and manipulate the counter file. It can display users' counts, set individual counts, or clear all counts. Setting artificially high counts may be useful for blocking users without changing their passwords. For example, one might find it useful to clear all counts every midnight from a cron job. The faillog8 command can be used instead of pam_tally to to maintain the counter file. Normally, failed attempts to access root will not cause the root account to become blocked, to prevent denial-of-service: if your users aren't given shell accounts and root may only login via su or at the machine console (not telnet/rsh, etc), this is safe. OPTIONS GLOBAL OPTIONS This can be used for auth and account module types. If something weird happens (like unable to open the file), return with PAM_SUCCESS if is given, else with the corresponding PAM error code. File where to keep counts. Default is /var/log/faillog. Will log the user name into the system log if the user is not found. Don't print informative messages. Don't log informative messages via syslog3. AUTH OPTIONS Authentication phase first checks if user should be denied access and if not it increments attempted login counter. Then on call to pam_setcred3 it resets the attempts counter. Deny access if tally for this user exceeds n. Always deny for n seconds after failed attempt. Allow access after n seconds after failed attempt. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator. If the module is invoked by a user with uid=0 the counter is not incremented. The sysadmin should use this for user launched services, like su, otherwise this argument should be omitted. Do not use the .fail_locktime field in /var/log/faillog for this user. Don't reset count on successful entry, only decrement. Root account can become unavailable. If /var/log/faillog contains a non-zero .fail_max/.fail_locktime field for this user then use it instead of / parameter. Don't use .fail_locktime filed in /var/log/faillog for this user. ACCOUNT OPTIONS Account phase resets attempts counter if the user is not magic root. This phase can be used optionally for services which don't call pam_setcred3 correctly or if the reset should be done regardless of the failure of the account phase of other modules. If the module is invoked by a user with uid=0 the counter is not incremented. The sysadmin should use this for user launched services, like su, otherwise this argument should be omitted. Don't reset count on successful entry, only decrement. MODULE TYPES PROVIDED The and module types are provided. RETURN VALUES PAM_AUTH_ERR A invalid option was given, the module was not able to retrieve the user name, no valid counter file was found, or too many failed logins. PAM_SUCCESS Everything was successful. PAM_USER_UNKNOWN User not known. EXAMPLES Add the following line to /etc/pam.d/login to lock the account after too many failed logins. The number of allowed fails is specified by /var/log/faillog and needs to be set with pam_tally or faillog8 before. auth required pam_securetty.so auth required pam_tally.so per_user auth required pam_env.so auth required pam_unix.so auth required pam_nologin.so account required pam_unix.so password required pam_unix.so session required pam_limits.so session required pam_unix.so session required pam_lastlog.so nowtmp session optional pam_mail.so standard FILES /var/log/faillog failure logging file SEE ALSO faillog8 , pam.conf5 , pam.d5 , pam8 AUTHOR pam_tally was written by Tim Baverstock and Tomas Mraz. Linux-PAM-1.1.8/modules/pam_tally/pam_tally.c0000644000000000000000000005543312160065211015706 00000000000000/* * pam_tally.c * */ /* By Tim Baverstock , Multi Media Machine Ltd. * 5 March 1997 * * Stuff stolen from pam_rootok and pam_listfile * * Changes by Tomas Mraz 5 January 2005 * Audit option added for Tomas patch by * Sebastien Tricaud 13 January 2005 */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include "faillog.h" /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #ifndef MAIN #define PAM_SM_AUTH #define PAM_SM_ACCOUNT /* #define PAM_SM_SESSION */ /* #define PAM_SM_PASSWORD */ #include #include #endif #include #ifndef TRUE #define TRUE 1L #define FALSE 0L #endif #ifndef HAVE_FSEEKO #define fseeko fseek #endif /*---------------------------------------------------------------------*/ #define DEFAULT_LOGFILE "/var/log/faillog" #define MODULE_NAME "pam_tally" #define tally_t unsigned short int #define TALLY_FMT "%hu" #define TALLY_HI ((tally_t)~0L) #ifndef FILENAME_MAX # define FILENAME_MAX MAXPATHLEN #endif struct fail_s { struct faillog fs_faillog; #ifndef MAIN time_t fs_fail_time; #endif /* ndef MAIN */ }; struct tally_options { const char *filename; tally_t deny; long lock_time; long unlock_time; unsigned int ctrl; }; #define PHASE_UNKNOWN 0 #define PHASE_AUTH 1 #define PHASE_ACCOUNT 2 #define PHASE_SESSION 3 #define OPT_MAGIC_ROOT 01 #define OPT_FAIL_ON_ERROR 02 #define OPT_DENY_ROOT 04 #define OPT_PER_USER 010 #define OPT_NO_LOCK_TIME 020 #define OPT_NO_RESET 040 #define OPT_AUDIT 0100 #define OPT_SILENT 0200 #define OPT_NOLOGNOTICE 0400 /*---------------------------------------------------------------------*/ /* some syslogging */ #ifdef MAIN #define pam_syslog tally_log static void tally_log (const pam_handle_t *pamh UNUSED, int priority UNUSED, const char *fmt, ...) { va_list args; va_start(args, fmt); fprintf(stderr, "%s: ", MODULE_NAME); vfprintf(stderr, fmt, args); fprintf(stderr,"\n"); va_end(args); } #define pam_modutil_getpwnam(pamh,user) getpwnam(user) #endif /*---------------------------------------------------------------------*/ /* --- Support function: parse arguments --- */ #ifndef MAIN static void log_phase_no_auth(pam_handle_t *pamh, int phase, const char *argv) { if ( phase != PHASE_AUTH ) { pam_syslog(pamh, LOG_ERR, "option %s allowed in auth phase only", argv); } } static int tally_parse_args(pam_handle_t *pamh, struct tally_options *opts, int phase, int argc, const char **argv) { memset(opts, 0, sizeof(*opts)); opts->filename = DEFAULT_LOGFILE; for ( ; argc-- > 0; ++argv ) { if ( ! strncmp( *argv, "file=", 5 ) ) { const char *from = *argv + 5; if ( *from!='/' || strlen(from)>FILENAME_MAX-1 ) { pam_syslog(pamh, LOG_ERR, "filename not /rooted or too long; %s", *argv); return PAM_AUTH_ERR; } opts->filename = from; } else if ( ! strcmp( *argv, "onerr=fail" ) ) { opts->ctrl |= OPT_FAIL_ON_ERROR; } else if ( ! strcmp( *argv, "onerr=succeed" ) ) { opts->ctrl &= ~OPT_FAIL_ON_ERROR; } else if ( ! strcmp( *argv, "magic_root" ) ) { opts->ctrl |= OPT_MAGIC_ROOT; } else if ( ! strcmp( *argv, "even_deny_root_account" ) ) { log_phase_no_auth(pamh, phase, *argv); opts->ctrl |= OPT_DENY_ROOT; } else if ( ! strncmp( *argv, "deny=", 5 ) ) { log_phase_no_auth(pamh, phase, *argv); if ( sscanf((*argv)+5,TALLY_FMT,&opts->deny) != 1 ) { pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); return PAM_AUTH_ERR; } } else if ( ! strncmp( *argv, "lock_time=", 10 ) ) { log_phase_no_auth(pamh, phase, *argv); if ( sscanf((*argv)+10,"%ld",&opts->lock_time) != 1 ) { pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); return PAM_AUTH_ERR; } } else if ( ! strncmp( *argv, "unlock_time=", 12 ) ) { log_phase_no_auth(pamh, phase, *argv); if ( sscanf((*argv)+12,"%ld",&opts->unlock_time) != 1 ) { pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); return PAM_AUTH_ERR; } } else if ( ! strcmp( *argv, "per_user" ) ) { log_phase_no_auth(pamh, phase, *argv); opts->ctrl |= OPT_PER_USER; } else if ( ! strcmp( *argv, "no_lock_time") ) { log_phase_no_auth(pamh, phase, *argv); opts->ctrl |= OPT_NO_LOCK_TIME; } else if ( ! strcmp( *argv, "no_reset" ) ) { opts->ctrl |= OPT_NO_RESET; } else if ( ! strcmp ( *argv, "audit") ) { opts->ctrl |= OPT_AUDIT; } else if ( ! strcmp ( *argv, "silent") ) { opts->ctrl |= OPT_SILENT; } else if ( ! strcmp ( *argv, "no_log_info") ) { opts->ctrl |= OPT_NOLOGNOTICE; } else { pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } } return PAM_SUCCESS; } #endif /* #ifndef MAIN */ /*---------------------------------------------------------------------*/ /* --- Support function: get uid (and optionally username) from PAM or cline_user --- */ #ifdef MAIN static char *cline_user=0; /* cline_user is used in the administration prog */ #endif static int pam_get_uid(pam_handle_t *pamh, uid_t *uid, const char **userp, struct tally_options *opts) { const char *user = NULL; struct passwd *pw; #ifdef MAIN user = cline_user; #else if ((pam_get_user( pamh, &user, NULL )) != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "pam_get_user; user?"); return PAM_AUTH_ERR; } #endif if ( !user || !*user ) { pam_syslog(pamh, LOG_ERR, "pam_get_uid; user?"); return PAM_AUTH_ERR; } if ( ! ( pw = pam_modutil_getpwnam( pamh, user ) ) ) { opts->ctrl & OPT_AUDIT ? pam_syslog(pamh, LOG_ERR, "pam_get_uid; no such user %s", user) : pam_syslog(pamh, LOG_ERR, "pam_get_uid; no such user"); return PAM_USER_UNKNOWN; } if ( uid ) *uid = pw->pw_uid; if ( userp ) *userp = user; return PAM_SUCCESS; } /*---------------------------------------------------------------------*/ /* --- Support functions: set/get tally data --- */ #ifndef MAIN static void _cleanup(pam_handle_t *pamh UNUSED, void *data, int error_status UNUSED) { free(data); } static void tally_set_data( pam_handle_t *pamh, time_t oldtime ) { time_t *data; if ( (data=malloc(sizeof(time_t))) != NULL ) { *data = oldtime; pam_set_data(pamh, MODULE_NAME, (void *)data, _cleanup); } } static int tally_get_data( pam_handle_t *pamh, time_t *oldtime ) { int rv; const void *data; rv = pam_get_data(pamh, MODULE_NAME, &data); if ( rv == PAM_SUCCESS && data != NULL && oldtime != NULL ) { *oldtime = *(const time_t *)data; pam_set_data(pamh, MODULE_NAME, NULL, NULL); } else { rv = -1; if (oldtime) *oldtime = 0; } return rv; } #endif /* #ifndef MAIN */ /*---------------------------------------------------------------------*/ /* --- Support function: open/create tallyfile and return tally for uid --- */ /* If on entry *tally==TALLY_HI, tallyfile is opened READONLY */ /* Otherwise, if on entry tallyfile doesn't exist, creation is attempted. */ static int get_tally(pam_handle_t *pamh, tally_t *tally, uid_t uid, const char *filename, FILE **TALLY, struct fail_s *fsp) { struct stat fileinfo; int lstat_ret = lstat(filename,&fileinfo); if ( lstat_ret && *tally!=TALLY_HI ) { int oldmask = umask(077); *TALLY=fopen(filename, "a"); /* Create file, or append-open in pathological case. */ umask(oldmask); if ( !*TALLY ) { pam_syslog(pamh, LOG_ALERT, "Couldn't create %s", filename); return PAM_AUTH_ERR; } lstat_ret = fstat(fileno(*TALLY),&fileinfo); fclose(*TALLY); } if ( lstat_ret ) { pam_syslog(pamh, LOG_ALERT, "Couldn't stat %s", filename); return PAM_AUTH_ERR; } if((fileinfo.st_mode & S_IWOTH) || !S_ISREG(fileinfo.st_mode)) { /* If the file is world writable or is not a normal file, return error */ pam_syslog(pamh, LOG_ALERT, "%s is either world writable or not a normal file", filename); return PAM_AUTH_ERR; } if ( ! ( *TALLY = fopen(filename,(*tally!=TALLY_HI)?"r+":"r") ) ) { pam_syslog(pamh, LOG_ALERT, "Error opening %s for %s", filename, *tally!=TALLY_HI?"update":"read"); /* Discovering why account service fails: e/uid are target user. * * perror(MODULE_NAME); * fprintf(stderr,"uid %d euid %d\n",getuid(), geteuid()); */ return PAM_AUTH_ERR; } if ( fseeko( *TALLY, (off_t) uid * sizeof(struct faillog), SEEK_SET ) ) { pam_syslog(pamh, LOG_ALERT, "fseek failed for %s", filename); fclose(*TALLY); return PAM_AUTH_ERR; } if ( (size_t)fileinfo.st_size <= uid * sizeof(struct faillog) ) { memset(fsp, 0, sizeof(struct faillog)); *tally=0; fsp->fs_faillog.fail_time = time(NULL); } else if (( fread((char *) &fsp->fs_faillog, sizeof(struct faillog), 1, *TALLY) )==0 ) { *tally=0; /* Assuming a gappy filesystem */ } else { *tally = fsp->fs_faillog.fail_cnt; } return PAM_SUCCESS; } /*---------------------------------------------------------------------*/ /* --- Support function: update and close tallyfile with tally!=TALLY_HI --- */ static int set_tally(pam_handle_t *pamh, tally_t tally, uid_t uid, const char *filename, FILE **TALLY, struct fail_s *fsp) { int retval = PAM_SUCCESS; if ( tally!=TALLY_HI ) { if ( fseeko( *TALLY, (off_t) uid * sizeof(struct faillog), SEEK_SET ) ) { pam_syslog(pamh, LOG_ALERT, "fseek failed for %s", filename); retval = PAM_AUTH_ERR; } else { fsp->fs_faillog.fail_cnt = tally; if (fwrite((char *) &fsp->fs_faillog, sizeof(struct faillog), 1, *TALLY)==0 ) { pam_syslog(pamh, LOG_ALERT, "update (fwrite) failed for %s", filename); retval = PAM_AUTH_ERR; } } } if ( fclose(*TALLY) ) { pam_syslog(pamh, LOG_ALERT, "update (fclose) failed for %s", filename); return PAM_AUTH_ERR; } *TALLY=NULL; return retval; } /*---------------------------------------------------------------------*/ /* --- PAM bits --- */ #ifndef MAIN #define RETURN_ERROR(i) return ((opts->ctrl & OPT_FAIL_ON_ERROR)?(i):(PAM_SUCCESS)) /*---------------------------------------------------------------------*/ /* --- tally bump function: bump tally for uid by (signed) inc --- */ static int tally_bump (int inc, time_t *oldtime, pam_handle_t *pamh, uid_t uid, const char *user, struct tally_options *opts) { tally_t tally = 0; /* !TALLY_HI --> Log opened for update */ FILE *TALLY = NULL; const void *remote_host = NULL, *cur_tty = NULL; struct fail_s fs, *fsp = &fs; int i; i=get_tally(pamh, &tally, uid, opts->filename, &TALLY, fsp); if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); } /* to remember old fail time (for locktime) */ fsp->fs_fail_time = fsp->fs_faillog.fail_time; if ( inc > 0 ) { if ( oldtime ) { *oldtime = fsp->fs_faillog.fail_time; } fsp->fs_faillog.fail_time = time(NULL); } else { if ( oldtime ) { fsp->fs_faillog.fail_time = *oldtime; } } (void) pam_get_item(pamh, PAM_RHOST, &remote_host); if (!remote_host) { (void) pam_get_item(pamh, PAM_TTY, &cur_tty); if (!cur_tty) { strncpy(fsp->fs_faillog.fail_line, "unknown", sizeof(fsp->fs_faillog.fail_line) - 1); fsp->fs_faillog.fail_line[sizeof(fsp->fs_faillog.fail_line)-1] = 0; } else { strncpy(fsp->fs_faillog.fail_line, cur_tty, sizeof(fsp->fs_faillog.fail_line)-1); fsp->fs_faillog.fail_line[sizeof(fsp->fs_faillog.fail_line)-1] = 0; } } else { strncpy(fsp->fs_faillog.fail_line, remote_host, (size_t)sizeof(fsp->fs_faillog.fail_line)); fsp->fs_faillog.fail_line[sizeof(fsp->fs_faillog.fail_line)-1] = 0; } if ( !(opts->ctrl & OPT_MAGIC_ROOT) || getuid() ) { /* magic_root doesn't change tally */ tally+=inc; if ( tally==TALLY_HI ) { /* Overflow *and* underflow. :) */ tally-=inc; pam_syslog(pamh, LOG_ALERT, "Tally %sflowed for user %s", (inc<0)?"under":"over",user); } } i=set_tally(pamh, tally, uid, opts->filename, &TALLY, fsp ); if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); } return PAM_SUCCESS; } static int tally_check (time_t oldtime, pam_handle_t *pamh, uid_t uid, const char *user, struct tally_options *opts) { tally_t deny = opts->deny; tally_t tally = TALLY_HI; long lock_time = opts->lock_time; struct fail_s fs, *fsp = &fs; FILE *TALLY=0; int i; i=get_tally(pamh, &tally, uid, opts->filename, &TALLY, fsp); if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); } if ( TALLY != NULL ) { fclose(TALLY); } if ( !(opts->ctrl & OPT_MAGIC_ROOT) || getuid() ) { /* magic_root skips tally check */ /* To deny or not to deny; that is the question */ /* if there's .fail_max entry and per_user=TRUE then deny=.fail_max */ if ( (fsp->fs_faillog.fail_max) && (opts->ctrl & OPT_PER_USER) ) { deny = fsp->fs_faillog.fail_max; } if ( (fsp->fs_faillog.fail_locktime) && (opts->ctrl & OPT_PER_USER) ) { lock_time = fsp->fs_faillog.fail_locktime; } if (lock_time && oldtime && !(opts->ctrl & OPT_NO_LOCK_TIME) ) { if ( lock_time + oldtime > time(NULL) ) { if (!(opts->ctrl & OPT_SILENT)) pam_info (pamh, _("Account temporary locked (%ld seconds left)"), oldtime+lock_time-time(NULL)); if (!(opts->ctrl & OPT_NOLOGNOTICE)) pam_syslog (pamh, LOG_NOTICE, "user %s (%lu) has time limit [%lds left]" " since last failure.", user, (unsigned long int) uid, oldtime+lock_time-time(NULL)); return PAM_AUTH_ERR; } } if (opts->unlock_time && oldtime) { if ( opts->unlock_time + oldtime <= time(NULL) ) { /* ignore deny check after unlock_time elapsed */ return PAM_SUCCESS; } } if ( ( deny != 0 ) && /* deny==0 means no deny */ ( tally > deny ) && /* tally>deny means exceeded */ ( ((opts->ctrl & OPT_DENY_ROOT) || uid) ) /* even_deny stops uid check */ ) { if (!(opts->ctrl & OPT_SILENT)) pam_info (pamh, _("Account locked due to %u failed logins"), (unsigned int)tally); if (!(opts->ctrl & OPT_NOLOGNOTICE)) pam_syslog(pamh, LOG_NOTICE, "user %s (%lu) tally "TALLY_FMT", deny "TALLY_FMT, user, (unsigned long int) uid, tally, deny); return PAM_AUTH_ERR; /* Only unconditional failure */ } } return PAM_SUCCESS; } static int tally_reset (pam_handle_t *pamh, uid_t uid, struct tally_options *opts) { tally_t tally = 0; /* !TALLY_HI --> Log opened for update */ struct fail_s fs, *fsp = &fs; FILE *TALLY=0; int i; i=get_tally(pamh, &tally, uid, opts->filename, &TALLY, fsp); if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); } /* resets if not magic root */ if ( (!(opts->ctrl & OPT_MAGIC_ROOT) || getuid()) && !(opts->ctrl & OPT_NO_RESET) ) { tally=0; } if (tally == 0) { fsp->fs_faillog.fail_time = (time_t) 0; strcpy(fsp->fs_faillog.fail_line, ""); } i=set_tally(pamh, tally, uid, opts->filename, &TALLY, fsp); if ( i != PAM_SUCCESS ) { RETURN_ERROR( i ); } return PAM_SUCCESS; } /*---------------------------------------------------------------------*/ /* --- authentication management functions (only) --- */ #ifdef PAM_SM_AUTH PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) { int rvcheck, rvbump; time_t oldtime = 0; struct tally_options options, *opts = &options; uid_t uid; const char *user; rvcheck = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv); if ( rvcheck != PAM_SUCCESS ) RETURN_ERROR( rvcheck ); if (flags & PAM_SILENT) opts->ctrl |= OPT_SILENT; rvcheck = pam_get_uid(pamh, &uid, &user, opts); if ( rvcheck != PAM_SUCCESS ) RETURN_ERROR( rvcheck ); rvbump = tally_bump(1, &oldtime, pamh, uid, user, opts); rvcheck = tally_check(oldtime, pamh, uid, user, opts); tally_set_data(pamh, oldtime); return rvcheck != PAM_SUCCESS ? rvcheck : rvbump; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) { int rv; time_t oldtime = 0; struct tally_options options, *opts = &options; uid_t uid; const char *user; rv = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv); if ( rv != PAM_SUCCESS ) RETURN_ERROR( rv ); if (flags & PAM_SILENT) opts->ctrl |= OPT_SILENT; rv = pam_get_uid(pamh, &uid, &user, opts); if ( rv != PAM_SUCCESS ) RETURN_ERROR( rv ); if ( tally_get_data(pamh, &oldtime) != 0 ) /* no data found */ return PAM_SUCCESS; if ( (rv=tally_bump(-1, &oldtime, pamh, uid, user, opts)) != PAM_SUCCESS ) return rv; return tally_reset(pamh, uid, opts); } #endif /*---------------------------------------------------------------------*/ /* --- authentication management functions (only) --- */ #ifdef PAM_SM_ACCOUNT /* To reset failcount of user on successfull login */ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) { int rv; time_t oldtime = 0; struct tally_options options, *opts = &options; uid_t uid; const char *user; rv = tally_parse_args(pamh, opts, PHASE_ACCOUNT, argc, argv); if ( rv != PAM_SUCCESS ) RETURN_ERROR( rv ); if (flags & PAM_SILENT) opts->ctrl |= OPT_SILENT; rv = pam_get_uid(pamh, &uid, &user, opts); if ( rv != PAM_SUCCESS ) RETURN_ERROR( rv ); if ( tally_get_data(pamh, &oldtime) != 0 ) /* no data found */ return PAM_SUCCESS; if ( (rv=tally_bump(-1, &oldtime, pamh, uid, user, opts)) != PAM_SUCCESS ) return rv; return tally_reset(pamh, uid, opts); } #endif /* #ifdef PAM_SM_ACCOUNT */ /*-----------------------------------------------------------------------*/ #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_tally_modstruct = { MODULE_NAME, #ifdef PAM_SM_AUTH pam_sm_authenticate, pam_sm_setcred, #else NULL, NULL, #endif #ifdef PAM_SM_ACCOUNT pam_sm_acct_mgmt, #else NULL, #endif NULL, NULL, NULL, }; #endif /* #ifdef PAM_STATIC */ /*-----------------------------------------------------------------------*/ #else /* #ifndef MAIN */ static const char *cline_filename = DEFAULT_LOGFILE; static tally_t cline_reset = TALLY_HI; /* Default is `interrogate only' */ static int cline_quiet = 0; /* * Not going to link with pamlib just for these.. :) */ static const char * pam_errors( int i ) { switch (i) { case PAM_AUTH_ERR: return _("Authentication error"); case PAM_SERVICE_ERR: return _("Service error"); case PAM_USER_UNKNOWN: return _("Unknown user"); default: return _("Unknown error"); } } static int getopts( char **argv ) { const char *pname = *argv; for ( ; *argv ; (void)(*argv && ++argv) ) { if ( !strcmp (*argv,"--file") ) cline_filename=*++argv; else if ( !strncmp(*argv,"--file=",7) ) cline_filename=*argv+7; else if ( !strcmp (*argv,"--user") ) cline_user=*++argv; else if ( !strncmp(*argv,"--user=",7) ) cline_user=*argv+7; else if ( !strcmp (*argv,"--reset") ) cline_reset=0; else if ( !strncmp(*argv,"--reset=",8)) { if ( sscanf(*argv+8,TALLY_FMT,&cline_reset) != 1 ) fprintf(stderr,_("%s: Bad number given to --reset=\n"),pname), exit(0); } else if ( !strcmp (*argv,"--quiet") ) cline_quiet=1; else { fprintf(stderr,_("%s: Unrecognised option %s\n"),pname,*argv); return FALSE; } } return TRUE; } int main ( int argc UNUSED, char **argv ) { struct fail_s fs, *fsp = &fs; if ( ! getopts( argv+1 ) ) { printf(_("%s: [--file rooted-filename] [--user username] " "[--reset[=n]] [--quiet]\n"), *argv); exit(0); } umask(077); /* * Major difference between individual user and all users: * --user just handles one user, just like PAM. * --user=* handles all users, sniffing cline_filename for nonzeros */ if ( cline_user ) { uid_t uid; tally_t tally=cline_reset; FILE *TALLY=0; struct tally_options opts; int i; memset(&opts, 0, sizeof(opts)); opts.ctrl = OPT_AUDIT; i=pam_get_uid(NULL, &uid, NULL, &opts); if ( i != PAM_SUCCESS ) { fprintf(stderr,"%s: %s\n",*argv,pam_errors(i)); exit(0); } i=get_tally(NULL, &tally, uid, cline_filename, &TALLY, fsp); if ( i != PAM_SUCCESS ) { fprintf(stderr,"%s: %s\n",*argv,pam_errors(i)); exit(0); } if ( !cline_quiet ) printf("User %s\t(%lu)\t%s "TALLY_FMT"\n",cline_user, (unsigned long int) uid, (cline_reset!=TALLY_HI)?"had":"has",tally); i=set_tally(NULL, cline_reset, uid, cline_filename, &TALLY, fsp); if ( i != PAM_SUCCESS ) { fprintf(stderr,"%s: %s\n",*argv,pam_errors(i)); exit(0); } } else /* !cline_user (ie, operate on all users) */ { FILE *TALLY=fopen(cline_filename, "r"); uid_t uid=0; if ( !TALLY ) perror(*argv), exit(0); for ( ; !feof(TALLY); uid++ ) { tally_t tally; struct passwd *pw; if ( ! fread((char *) &fsp->fs_faillog, sizeof (struct faillog), 1, TALLY) || ! fsp->fs_faillog.fail_cnt ) { continue; } tally = fsp->fs_faillog.fail_cnt; if ( ( pw=getpwuid(uid) ) ) { printf("User %s\t(%lu)\t%s "TALLY_FMT"\n",pw->pw_name, (unsigned long int) uid, (cline_reset!=TALLY_HI)?"had":"has",tally); } else { printf("User [NONAME]\t(%lu)\t%s "TALLY_FMT"\n", (unsigned long int) uid, (cline_reset!=TALLY_HI)?"had":"has",tally); } } fclose(TALLY); if ( cline_reset!=0 && cline_reset!=TALLY_HI ) { fprintf(stderr,_("%s: Can't reset all users to non-zero\n"),*argv); } else if ( !cline_reset ) { TALLY=fopen(cline_filename, "w"); if ( !TALLY ) perror(*argv), exit(0); fclose(TALLY); } } return 0; } #endif /* #ifndef MAIN */ Linux-PAM-1.1.8/modules/pam_tally/Makefile.am0000644000000000000000000000153012160065211015601 00000000000000# # Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_tally man_MANS = pam_tally.8 XMLS = README.xml pam_tally.8.xml TESTS = tst-pam_tally securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) noinst_HEADERS = faillog.h AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include pam_tally_la_LDFLAGS = -no-undefined -avoid-version -module pam_tally_la_LIBADD = $(top_builddir)/libpam/libpam.la if HAVE_VERSIONING pam_tally_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_tally.la sbin_PROGRAMS = pam_tally pam_tally_SOURCES = pam_tally_app.c if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_tally.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_tally/README0000644000000000000000000001125312216527611014441 00000000000000pam_tally — The login counter (tallying) module ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail. pam_tally has several limitations, which are solved with pam_tally2. For this reason pam_tally is deprecated and will be removed in a future release. pam_tally comes in two parts: pam_tally.so and pam_tally. The former is the PAM module and the latter, a stand-alone program. pam_tally is an (optional) application which can be used to interrogate and manipulate the counter file. It can display users' counts, set individual counts, or clear all counts. Setting artificially high counts may be useful for blocking users without changing their passwords. For example, one might find it useful to clear all counts every midnight from a cron job. The faillog(8) command can be used instead of pam_tally to to maintain the counter file. Normally, failed attempts to access root will not cause the root account to become blocked, to prevent denial-of-service: if your users aren't given shell accounts and root may only login via su or at the machine console (not telnet/ rsh, etc), this is safe. OPTIONS GLOBAL OPTIONS This can be used for auth and account module types. onerr=[fail|succeed] If something weird happens (like unable to open the file), return with PAM_SUCCESS if onerr=succeed is given, else with the corresponding PAM error code. file=/path/to/counter File where to keep counts. Default is /var/log/faillog. audit Will log the user name into the system log if the user is not found. silent Don't print informative messages. no_log_info Don't log informative messages via syslog(3). AUTH OPTIONS Authentication phase first checks if user should be denied access and if not it increments attempted login counter. Then on call to pam_setcred(3) it resets the attempts counter. deny=n Deny access if tally for this user exceeds n. lock_time=n Always deny for n seconds after failed attempt. unlock_time=n Allow access after n seconds after failed attempt. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator. magic_root If the module is invoked by a user with uid=0 the counter is not incremented. The sysadmin should use this for user launched services, like su, otherwise this argument should be omitted. no_lock_time Do not use the .fail_locktime field in /var/log/faillog for this user. no_reset Don't reset count on successful entry, only decrement. even_deny_root_account Root account can become unavailable. per_user If /var/log/faillog contains a non-zero .fail_max/.fail_locktime field for this user then use it instead of deny=n/ lock_time=n parameter. no_lock_time Don't use .fail_locktime filed in /var/log/faillog for this user. ACCOUNT OPTIONS Account phase resets attempts counter if the user is not magic root. This phase can be used optionally for services which don't call pam_setcred(3) correctly or if the reset should be done regardless of the failure of the account phase of other modules. magic_root If the module is invoked by a user with uid=0 the counter is not incremented. The sysadmin should use this for user launched services, like su, otherwise this argument should be omitted. no_reset Don't reset count on successful entry, only decrement. EXAMPLES Add the following line to /etc/pam.d/login to lock the account after too many failed logins. The number of allowed fails is specified by /var/log/faillog and needs to be set with pam_tally or faillog(8) before. auth required pam_securetty.so auth required pam_tally.so per_user auth required pam_env.so auth required pam_unix.so auth required pam_nologin.so account required pam_unix.so password required pam_unix.so session required pam_limits.so session required pam_unix.so session required pam_lastlog.so nowtmp session optional pam_mail.so standard AUTHOR pam_tally was written by Tim Baverstock and Tomas Mraz. Linux-PAM-1.1.8/modules/pam_tally/Makefile.in0000644000000000000000000006553112216527537015645 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map sbin_PROGRAMS = pam_tally$(EXEEXT) subdir = modules/pam_tally DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(sbindir)" \ "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_tally_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_tally_la_SOURCES = pam_tally.c pam_tally_la_OBJECTS = pam_tally.lo pam_tally_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(pam_tally_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(sbin_PROGRAMS) am_pam_tally_OBJECTS = pam_tally_app.$(OBJEXT) pam_tally_OBJECTS = $(am_pam_tally_OBJECTS) pam_tally_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_tally.c $(pam_tally_SOURCES) DIST_SOURCES = pam_tally.c $(pam_tally_SOURCES) man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_tally man_MANS = pam_tally.8 XMLS = README.xml pam_tally.8.xml TESTS = tst-pam_tally securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) noinst_HEADERS = faillog.h AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include pam_tally_la_LDFLAGS = -no-undefined -avoid-version -module \ $(am__append_1) pam_tally_la_LIBADD = $(top_builddir)/libpam/libpam.la securelib_LTLIBRARIES = pam_tally.la pam_tally_SOURCES = pam_tally_app.c @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_tally/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_tally/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_tally.la: $(pam_tally_la_OBJECTS) $(pam_tally_la_DEPENDENCIES) $(pam_tally_la_LINK) -rpath $(securelibdir) $(pam_tally_la_OBJECTS) $(pam_tally_la_LIBADD) $(LIBS) install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(sbindir)" && rm -f $$files clean-sbinPROGRAMS: @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pam_tally$(EXEEXT): $(pam_tally_OBJECTS) $(pam_tally_DEPENDENCIES) @rm -f pam_tally$(EXEEXT) $(LINK) $(pam_tally_OBJECTS) $(pam_tally_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_tally.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_tally_app.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(sbindir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \ clean-securelibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-sbinPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-sbinPROGRAMS \ uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-sbinPROGRAMS \ clean-securelibLTLIBRARIES 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-man8 \ install-pdf install-pdf-am install-ps install-ps-am \ install-sbinPROGRAMS install-securelibLTLIBRARIES \ 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-man \ uninstall-man8 uninstall-sbinPROGRAMS \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_tally.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_tally/pam_tally.80000644000000000000000000001613012216527611015633 00000000000000'\" t .\" Title: pam_tally .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_TALLY" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_tally \- The login counter (tallying) module .SH "SYNOPSIS" .HP \w'\fBpam_tally\&.so\fR\ 'u \fBpam_tally\&.so\fR [file=\fI/path/to/counter\fR] [onerr=[\fIfail\fR|\fIsucceed\fR]] [magic_root] [even_deny_root_account] [deny=\fIn\fR] [lock_time=\fIn\fR] [unlock_time=\fIn\fR] [per_user] [no_lock_time] [no_reset] [audit] [silent] [no_log_info] .HP \w'\fBpam_tally\fR\ 'u \fBpam_tally\fR [\-\-file\ \fI/path/to/counter\fR] [\-\-user\ \fIusername\fR] [\-\-reset[=\fIn\fR]] [\-\-quiet] .SH "DESCRIPTION" .PP This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail\&. .PP pam_tally has several limitations, which are solved with pam_tally2\&. For this reason pam_tally is deprecated and will be removed in a future release\&. .PP pam_tally comes in two parts: \fBpam_tally\&.so\fR and \fBpam_tally\fR\&. The former is the PAM module and the latter, a stand\-alone program\&. \fBpam_tally\fR is an (optional) application which can be used to interrogate and manipulate the counter file\&. It can display users\*(Aq counts, set individual counts, or clear all counts\&. Setting artificially high counts may be useful for blocking users without changing their passwords\&. For example, one might find it useful to clear all counts every midnight from a cron job\&. The \fBfaillog\fR(8) command can be used instead of pam_tally to to maintain the counter file\&. .PP Normally, failed attempts to access \fIroot\fR will \fBnot\fR cause the root account to become blocked, to prevent denial\-of\-service: if your users aren\*(Aqt given shell accounts and root may only login via \fBsu\fR or at the machine console (not telnet/rsh, etc), this is safe\&. .SH "OPTIONS" .PP GLOBAL OPTIONS .RS 4 This can be used for \fIauth\fR and \fIaccount\fR module types\&. .PP \fBonerr=[\fR\fB\fIfail\fR\fR\fB|\fR\fB\fIsucceed\fR\fR\fB]\fR .RS 4 If something weird happens (like unable to open the file), return with \fBPAM_SUCCESS\fR if \fBonerr=\fR\fB\fIsucceed\fR\fR is given, else with the corresponding PAM error code\&. .RE .PP \fBfile=\fR\fB\fI/path/to/counter\fR\fR .RS 4 File where to keep counts\&. Default is /var/log/faillog\&. .RE .PP \fBaudit\fR .RS 4 Will log the user name into the system log if the user is not found\&. .RE .PP \fBsilent\fR .RS 4 Don\*(Aqt print informative messages\&. .RE .PP \fBno_log_info\fR .RS 4 Don\*(Aqt log informative messages via \fBsyslog\fR(3)\&. .RE .RE .PP AUTH OPTIONS .RS 4 Authentication phase first checks if user should be denied access and if not it increments attempted login counter\&. Then on call to \fBpam_setcred\fR(3) it resets the attempts counter\&. .PP \fBdeny=\fR\fB\fIn\fR\fR .RS 4 Deny access if tally for this user exceeds \fIn\fR\&. .RE .PP \fBlock_time=\fR\fB\fIn\fR\fR .RS 4 Always deny for \fIn\fR seconds after failed attempt\&. .RE .PP \fBunlock_time=\fR\fB\fIn\fR\fR .RS 4 Allow access after \fIn\fR seconds after failed attempt\&. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts\&. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator\&. .RE .PP \fBmagic_root\fR .RS 4 If the module is invoked by a user with uid=0 the counter is not incremented\&. The sysadmin should use this for user launched services, like \fBsu\fR, otherwise this argument should be omitted\&. .RE .PP \fBno_lock_time\fR .RS 4 Do not use the \&.fail_locktime field in /var/log/faillog for this user\&. .RE .PP \fBno_reset\fR .RS 4 Don\*(Aqt reset count on successful entry, only decrement\&. .RE .PP \fBeven_deny_root_account\fR .RS 4 Root account can become unavailable\&. .RE .PP \fBper_user\fR .RS 4 If /var/log/faillog contains a non\-zero \&.fail_max/\&.fail_locktime field for this user then use it instead of \fBdeny=\fR\fB\fIn\fR\fR/ \fBlock_time=\fR\fB\fIn\fR\fR parameter\&. .RE .PP \fBno_lock_time\fR .RS 4 Don\*(Aqt use \&.fail_locktime filed in /var/log/faillog for this user\&. .RE .RE .PP ACCOUNT OPTIONS .RS 4 Account phase resets attempts counter if the user is \fBnot\fR magic root\&. This phase can be used optionally for services which don\*(Aqt call \fBpam_setcred\fR(3) correctly or if the reset should be done regardless of the failure of the account phase of other modules\&. .PP \fBmagic_root\fR .RS 4 If the module is invoked by a user with uid=0 the counter is not incremented\&. The sysadmin should use this for user launched services, like \fBsu\fR, otherwise this argument should be omitted\&. .RE .PP \fBno_reset\fR .RS 4 Don\*(Aqt reset count on successful entry, only decrement\&. .RE .RE .SH "MODULE TYPES PROVIDED" .PP The \fBauth\fR and \fBaccount\fR module types are provided\&. .SH "RETURN VALUES" .PP PAM_AUTH_ERR .RS 4 A invalid option was given, the module was not able to retrieve the user name, no valid counter file was found, or too many failed logins\&. .RE .PP PAM_SUCCESS .RS 4 Everything was successful\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known\&. .RE .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/login to lock the account after too many failed logins\&. The number of allowed fails is specified by /var/log/faillog and needs to be set with pam_tally or \fBfaillog\fR(8) before\&. .sp .if n \{\ .RS 4 .\} .nf auth required pam_securetty\&.so auth required pam_tally\&.so per_user auth required pam_env\&.so auth required pam_unix\&.so auth required pam_nologin\&.so account required pam_unix\&.so password required pam_unix\&.so session required pam_limits\&.so session required pam_unix\&.so session required pam_lastlog\&.so nowtmp session optional pam_mail\&.so standard .fi .if n \{\ .RE .\} .SH "FILES" .PP /var/log/faillog .RS 4 failure logging file .RE .SH "SEE ALSO" .PP \fBfaillog\fR(8), \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_tally was written by Tim Baverstock and Tomas Mraz\&. Linux-PAM-1.1.8/modules/pam_tally/README.xml0000644000000000000000000000220212160065211015221 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tally.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_tally-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_selinux/0000755000000000000000000000000012216542312014174 500000000000000Linux-PAM-1.1.8/modules/pam_selinux/tst-pam_selinux0000755000000000000000000000006612160065211017174 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_selinux.so Linux-PAM-1.1.8/modules/pam_selinux/pam_selinux.8.xml0000644000000000000000000001772712160065211017342 00000000000000 pam_selinux 8 Linux-PAM Manual pam_selinux PAM module to set the default security context pam_selinux.so open close restore nottys debug verbose select_context env_params use_current_range DESCRIPTION pam_selinux is a PAM module that sets up the default SELinux security context for the next executed process. When a new session is started, the open_session part of the module computes and sets up the execution security context used for the next execve2 call, the file security context for the controlling terminal, and the security context used for creating a new kernel keyring. When the session is ended, the close_session part of the module restores old security contexts that were in effect before the change made by the open_session part of the module. Adding pam_selinux into the PAM stack might disrupt behavior of other PAM modules which execute applications. To avoid that, pam_selinux.so open should be placed after such modules in the PAM stack, and pam_selinux.so close should be placed before them. When such a placement is not feasible, pam_selinux.so restore could be used to temporary restore original security contexts. OPTIONS Only execute the open_session part of the module. Only execute the close_session part of the module. In open_session part of the module, temporarily restore the security contexts as they were before the previous call of the module. Another call of this module without the restore option will set up the new security contexts again. Do not setup security context of the controlling terminal. Turn on debug messages via syslog3 . Attempt to inform the user when security context is set. Attempt to ask the user for a custom security context role. If MLS is on, ask also for sensitivity level. Attempt to obtain a custom security context role from PAM environment. If MLS is on, obtain also sensitivity level. This option and the select_context option are mutually exclusive. The respective PAM environment variables are SELINUX_ROLE_REQUESTED, SELINUX_LEVEL_REQUESTED, and SELINUX_USE_CURRENT_RANGE. The first two variables are self describing and the last one if set to 1 makes the PAM module behave as if the use_current_range was specified on the command line of the module. Use the sensitivity level of the current process for the user context instead of the default level. Also suppresses asking of the sensitivity level from the user or obtaining it from PAM environment. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_SUCCESS The security context was set successfully. PAM_SESSION_ERR Unable to get or set a valid context. PAM_USER_UNKNOWN The user is not known to the system. PAM_BUF_ERR Memory allocation error. EXAMPLES auth required pam_unix.so session required pam_permit.so session optional pam_selinux.so SEE ALSO execve2 , tty4 , pam.d5 , pam8 , selinux8 AUTHOR pam_selinux was written by Dan Walsh <dwalsh@redhat.com>. Linux-PAM-1.1.8/modules/pam_selinux/pam_selinux.c0000644000000000000000000005673612160065211016621 00000000000000/****************************************************************************** * A module for Linux-PAM that will set the default security context after login * via PAM. * * Copyright (c) 2003-2008 Red Hat, Inc. * Written by Dan Walsh * Additional improvements by Tomas Mraz * * 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. * */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #define PAM_SM_AUTH #define PAM_SM_SESSION #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_LIBAUDIT #include #include #include #endif /* Send audit message */ static int send_audit_message(pam_handle_t *pamh, int success, security_context_t default_context, security_context_t selected_context) { int rc=0; #ifdef HAVE_LIBAUDIT char *msg = NULL; int audit_fd = audit_open(); security_context_t default_raw=NULL; security_context_t selected_raw=NULL; const void *tty = NULL, *rhost = NULL; rc = -1; if (audit_fd < 0) { if (errno == EINVAL || errno == EPROTONOSUPPORT || errno == EAFNOSUPPORT) return 0; /* No audit support in kernel */ pam_syslog(pamh, LOG_ERR, "Error connecting to audit system."); return rc; } (void)pam_get_item(pamh, PAM_TTY, &tty); (void)pam_get_item(pamh, PAM_RHOST, &rhost); if (selinux_trans_to_raw_context(default_context, &default_raw) < 0) { pam_syslog(pamh, LOG_ERR, "Error translating default context."); default_raw = NULL; } if (selinux_trans_to_raw_context(selected_context, &selected_raw) < 0) { pam_syslog(pamh, LOG_ERR, "Error translating selected context."); selected_raw = NULL; } if (asprintf(&msg, "pam: default-context=%s selected-context=%s", default_raw ? default_raw : (default_context ? default_context : "?"), selected_raw ? selected_raw : (selected_context ? selected_context : "?")) < 0) { pam_syslog(pamh, LOG_ERR, "Error allocating memory."); goto out; } if (audit_log_user_message(audit_fd, AUDIT_USER_ROLE_CHANGE, msg, rhost, NULL, tty, success) <= 0) { pam_syslog(pamh, LOG_ERR, "Error sending audit message."); goto out; } rc = 0; out: free(msg); freecon(default_raw); freecon(selected_raw); close(audit_fd); #else pam_syslog(pamh, LOG_NOTICE, "pam: default-context=%s selected-context=%s success %d", default_context, selected_context, success); #endif return rc; } static int send_text (pam_handle_t *pamh, const char *text, int debug) { if (debug) pam_syslog(pamh, LOG_NOTICE, "%s", text); return pam_info (pamh, "%s", text); } /* * This function sends a message to the user and gets the response. The caller * is responsible for freeing the responses. */ static int query_response (pam_handle_t *pamh, const char *text, const char *def, char **response, int debug) { int rc; if (def) rc = pam_prompt (pamh, PAM_PROMPT_ECHO_ON, response, "%s [%s] ", text, def); else rc = pam_prompt (pamh, PAM_PROMPT_ECHO_ON, response, "%s ", text); if (*response == NULL) { rc = PAM_CONV_ERR; } if (rc != PAM_SUCCESS) { pam_syslog(pamh, LOG_WARNING, "No response to query: %s", text); } else if (debug) pam_syslog(pamh, LOG_NOTICE, "%s %s", text, *response); return rc; } static int mls_range_allowed(pam_handle_t *pamh, security_context_t src, security_context_t dst, int debug) { struct av_decision avd; int retval; security_class_t class; access_vector_t bit; context_t src_context; context_t dst_context; class = string_to_security_class("context"); if (!class) { pam_syslog(pamh, LOG_ERR, "Failed to translate security class context. %m"); return 0; } bit = string_to_av_perm(class, "contains"); if (!bit) { pam_syslog(pamh, LOG_ERR, "Failed to translate av perm contains. %m"); return 0; } src_context = context_new (src); dst_context = context_new (dst); context_range_set(dst_context, context_range_get(src_context)); if (debug) pam_syslog(pamh, LOG_NOTICE, "Checking if %s mls range valid for %s", dst, context_str(dst_context)); retval = security_compute_av(context_str(dst_context), dst, class, bit, &avd); context_free(src_context); context_free(dst_context); if (retval || ((bit & avd.allowed) != bit)) return 0; return 1; } static security_context_t config_context (pam_handle_t *pamh, security_context_t defaultcon, int use_current_range, int debug) { security_context_t newcon=NULL; context_t new_context; int mls_enabled = is_selinux_mls_enabled(); char *response=NULL; char *type=NULL; char resp_val = 0; pam_prompt (pamh, PAM_TEXT_INFO, NULL, _("Default Security Context %s\n"), defaultcon); while (1) { if (query_response(pamh, _("Would you like to enter a different role or level?"), "n", &response, debug) == PAM_SUCCESS) { resp_val = response[0]; _pam_drop(response); } else { resp_val = 'N'; } if ((resp_val == 'y') || (resp_val == 'Y')) { if ((new_context = context_new(defaultcon)) == NULL) goto fail_set; /* Allow the user to enter role and level individually */ if (query_response(pamh, _("role:"), context_role_get(new_context), &response, debug) == PAM_SUCCESS && response[0]) { if (get_default_type(response, &type)) { pam_prompt (pamh, PAM_ERROR_MSG, NULL, _("No default type for role %s\n"), response); _pam_drop(response); continue; } else { if (context_role_set(new_context, response)) goto fail_set; if (context_type_set (new_context, type)) goto fail_set; _pam_drop(type); } } _pam_drop(response); if (mls_enabled) { if (use_current_range) { security_context_t mycon = NULL; context_t my_context; if (getcon(&mycon) != 0) goto fail_set; my_context = context_new(mycon); if (my_context == NULL) { freecon(mycon); goto fail_set; } freecon(mycon); if (context_range_set(new_context, context_range_get(my_context))) { context_free(my_context); goto fail_set; } context_free(my_context); } else if (query_response(pamh, _("level:"), context_range_get(new_context), &response, debug) == PAM_SUCCESS && response[0]) { if (context_range_set(new_context, response)) goto fail_set; } _pam_drop(response); } if (debug) pam_syslog(pamh, LOG_NOTICE, "Selected Security Context %s", context_str(new_context)); /* Get the string value of the context and see if it is valid. */ if (!security_check_context(context_str(new_context))) { newcon = strdup(context_str(new_context)); if (newcon == NULL) goto fail_set; context_free(new_context); /* we have to check that this user is allowed to go into the range they have specified ... role is tied to an seuser, so that'll be checked at setexeccon time */ if (mls_enabled && !mls_range_allowed(pamh, defaultcon, newcon, debug)) { pam_syslog(pamh, LOG_NOTICE, "Security context %s is not allowed for %s", defaultcon, newcon); send_audit_message(pamh, 0, defaultcon, newcon); free(newcon); goto fail_range; } return newcon; } else { send_audit_message(pamh, 0, defaultcon, context_str(new_context)); send_text(pamh,_("Not a valid security context"),debug); } context_free(new_context); /* next time around allocates another */ } else return strdup(defaultcon); } /* end while */ return NULL; fail_set: free(type); _pam_drop(response); context_free (new_context); send_audit_message(pamh, 0, defaultcon, NULL); fail_range: return NULL; } static security_context_t context_from_env (pam_handle_t *pamh, security_context_t defaultcon, int env_params, int use_current_range, int debug) { security_context_t newcon = NULL; context_t new_context; context_t my_context = NULL; int mls_enabled = is_selinux_mls_enabled(); const char *env = NULL; char *type = NULL; int fail = 1; if ((new_context = context_new(defaultcon)) == NULL) goto fail_set; if (env_params && (env = pam_getenv(pamh, "SELINUX_ROLE_REQUESTED")) != NULL && env[0] != '\0') { if (debug) pam_syslog(pamh, LOG_NOTICE, "Requested role: %s", env); if (get_default_type(env, &type)) { pam_syslog(pamh, LOG_NOTICE, "No default type for role %s", env); goto fail_set; } else { if (context_role_set(new_context, env)) goto fail_set; if (context_type_set(new_context, type)) goto fail_set; } } if (mls_enabled) { if ((env = pam_getenv(pamh, "SELINUX_USE_CURRENT_RANGE")) != NULL && env[0] == '1') { if (debug) pam_syslog(pamh, LOG_NOTICE, "SELINUX_USE_CURRENT_RANGE is set"); use_current_range = 1; } if (use_current_range) { security_context_t mycon = NULL; if (getcon(&mycon) != 0) goto fail_set; my_context = context_new(mycon); if (my_context == NULL) { freecon(mycon); goto fail_set; } freecon(mycon); env = context_range_get(my_context); } else { env = pam_getenv(pamh, "SELINUX_LEVEL_REQUESTED"); } if (env != NULL && env[0] != '\0') { if (debug) pam_syslog(pamh, LOG_NOTICE, "Requested level: %s", env); if (context_range_set(new_context, env)) goto fail_set; } } newcon = strdup(context_str(new_context)); if (newcon == NULL) goto fail_set; if (debug) pam_syslog(pamh, LOG_NOTICE, "Selected Security Context %s", newcon); /* Get the string value of the context and see if it is valid. */ if (security_check_context(newcon)) { pam_syslog(pamh, LOG_NOTICE, "Not a valid security context %s", newcon); goto fail_set; } /* we have to check that this user is allowed to go into the range they have specified ... role is tied to an seuser, so that'll be checked at setexeccon time */ if (mls_enabled && !mls_range_allowed(pamh, defaultcon, newcon, debug)) { pam_syslog(pamh, LOG_NOTICE, "Security context %s is not allowed for %s", defaultcon, newcon); goto fail_set; } fail = 0; fail_set: free(type); context_free(my_context); context_free(new_context); if (fail) { send_audit_message(pamh, 0, defaultcon, newcon); freecon(newcon); newcon = NULL; } return newcon; } #define DATANAME "pam_selinux_context" typedef struct { security_context_t exec_context; security_context_t prev_exec_context; security_context_t default_user_context; security_context_t tty_context; security_context_t prev_tty_context; char *tty_path; } module_data_t; static void free_module_data(module_data_t *data) { free(data->tty_path); freecon(data->prev_tty_context); freecon(data->tty_context); freecon(data->default_user_context); freecon(data->prev_exec_context); if (data->exec_context != data->default_user_context) freecon(data->exec_context); memset(data, 0, sizeof(*data)); free(data); } static void cleanup(pam_handle_t *pamh UNUSED, void *data, int err UNUSED) { free_module_data(data); } static const module_data_t * get_module_data(const pam_handle_t *pamh) { const void *data; return (pam_get_data(pamh, DATANAME, &data) == PAM_SUCCESS) ? data : NULL; } static const char * get_item(const pam_handle_t *pamh, int item_type) { const void *item; return (pam_get_item(pamh, item_type, &item) == PAM_SUCCESS) ? item : NULL; } static int set_exec_context(const pam_handle_t *pamh, security_context_t context) { if (setexeccon(context) == 0) return 0; pam_syslog(pamh, LOG_ERR, "Setting executable context \"%s\" failed: %m", context ? context : ""); return -1; } static int set_file_context(const pam_handle_t *pamh, security_context_t context, const char *file) { if (!file) return 0; if (setfilecon(file, context) == 0 || errno == ENOENT) return 0; pam_syslog(pamh, LOG_ERR, "Setting file context \"%s\" failed for %s: %m", context ? context : "", file); return -1; } static int compute_exec_context(pam_handle_t *pamh, module_data_t *data, int select_context, int use_current_range, int env_params, int debug) { const char *username; #ifdef HAVE_GETSEUSER const char *service; #endif char *seuser = NULL; char *level = NULL; security_context_t *contextlist = NULL; int num_contexts = 0; if (!(username = get_item(pamh, PAM_USER))) { pam_syslog(pamh, LOG_ERR, "Cannot obtain the user name"); return PAM_USER_UNKNOWN; } /* compute execute context */ #ifdef HAVE_GETSEUSER if (!(service = get_item(pamh, PAM_SERVICE))) { pam_syslog(pamh, LOG_ERR, "Cannot obtain the service name"); return PAM_SESSION_ERR; } if (getseuser(username, service, &seuser, &level) == 0) { #else if (getseuserbyname(username, &seuser, &level) == 0) { #endif num_contexts = get_ordered_context_list_with_level(seuser, level, NULL, &contextlist); if (debug) pam_syslog(pamh, LOG_DEBUG, "Username= %s SELinux User= %s Level= %s", username, seuser, level); free(level); } if (num_contexts > 0) { free(seuser); data->default_user_context = strdup(contextlist[0]); freeconary(contextlist); if (!data->default_user_context) { pam_syslog(pamh, LOG_ERR, "Out of memory"); return PAM_BUF_ERR; } data->exec_context = data->default_user_context; if (select_context) data->exec_context = config_context(pamh, data->default_user_context, use_current_range, debug); else if (env_params || use_current_range) data->exec_context = context_from_env(pamh, data->default_user_context, env_params, use_current_range, debug); } if (!data->exec_context) { pam_syslog(pamh, LOG_ERR, "Unable to get valid context for %s", username); pam_prompt(pamh, PAM_ERROR_MSG, NULL, _("Unable to get valid context for %s"), username); } if (getexeccon(&data->prev_exec_context) < 0) data->prev_exec_context = NULL; return PAM_SUCCESS; } static int compute_tty_context(const pam_handle_t *pamh, module_data_t *data) { const char *tty = get_item(pamh, PAM_TTY); if (!tty || !*tty || !strcmp(tty, "ssh") || !strncmp(tty, "NODEV", 5)) { tty = ttyname(STDIN_FILENO); if (!tty || !*tty) tty = ttyname(STDOUT_FILENO); if (!tty || !*tty) tty = ttyname(STDERR_FILENO); if (!tty || !*tty) return PAM_SUCCESS; } if (strncmp("/dev/", tty, 5)) { if (asprintf(&data->tty_path, "%s%s", "/dev/", tty) < 0) data->tty_path = NULL; } else { data->tty_path = strdup(tty); } if (!data->tty_path) { pam_syslog(pamh, LOG_ERR, "Out of memory"); return PAM_BUF_ERR; } if (getfilecon(data->tty_path, &data->prev_tty_context) < 0) { data->prev_tty_context = NULL; if (errno == ENOENT) { free(data->tty_path); data->tty_path = NULL; return PAM_SUCCESS; } pam_syslog(pamh, LOG_ERR, "Failed to get current context for %s: %m", data->tty_path); return (security_getenforce() == 1) ? PAM_SESSION_ERR : PAM_SUCCESS; } if (security_compute_relabel(data->exec_context, data->prev_tty_context, SECCLASS_CHR_FILE, &data->tty_context)) { data->tty_context = NULL; pam_syslog(pamh, LOG_ERR, "Failed to compute new context for %s: %m", data->tty_path); freecon(data->prev_tty_context); data->prev_tty_context = NULL; free(data->tty_path); data->tty_path = NULL; return (security_getenforce() == 1) ? PAM_SESSION_ERR : PAM_SUCCESS; } return PAM_SUCCESS; } static int restore_context(const pam_handle_t *pamh, const module_data_t *data, int debug) { int err; if (!data) { if (debug) pam_syslog(pamh, LOG_NOTICE, "No context to restore"); return PAM_SUCCESS; } if (debug && data->tty_path) pam_syslog(pamh, LOG_NOTICE, "Restore file context of tty %s: [%s] -> [%s]", data->tty_path, data->tty_context ? data->tty_context : "", data->prev_tty_context ? data->prev_tty_context : ""); err = set_file_context(pamh, data->prev_tty_context, data->tty_path); if (debug) pam_syslog(pamh, LOG_NOTICE, "Restore executable context: [%s] -> [%s]", data->exec_context, data->prev_exec_context ? data->prev_exec_context : ""); err |= set_exec_context(pamh, data->prev_exec_context); if (err && security_getenforce() == 1) return PAM_SESSION_ERR; return PAM_SUCCESS; } static int set_context(pam_handle_t *pamh, const module_data_t *data, int debug, int verbose) { int rc, err; if (debug && data->tty_path) pam_syslog(pamh, LOG_NOTICE, "Set file context of tty %s: [%s] -> [%s]", data->tty_path, data->prev_tty_context ? data->prev_tty_context : "", data->tty_context ? data->tty_context : ""); err = set_file_context(pamh, data->tty_context, data->tty_path); if (debug) pam_syslog(pamh, LOG_NOTICE, "Set executable context: [%s] -> [%s]", data->prev_exec_context ? data->prev_exec_context : "", data->exec_context); rc = set_exec_context(pamh, data->exec_context); err |= rc; send_audit_message(pamh, !rc, data->default_user_context, data->exec_context); if (verbose && !rc) { char msg[PATH_MAX]; snprintf(msg, sizeof(msg), _("Security Context %s Assigned"), data->exec_context); send_text(pamh, msg, debug); } #ifdef HAVE_SETKEYCREATECON if (debug) pam_syslog(pamh, LOG_NOTICE, "Set key creation context to %s", data->exec_context ? data->exec_context : ""); rc = setkeycreatecon(data->exec_context); err |= rc; if (rc) pam_syslog(pamh, LOG_ERR, "Setting key creation context %s failed: %m", data->exec_context ? data->exec_context : ""); if (verbose && !rc) { char msg[PATH_MAX]; snprintf(msg, sizeof(msg), _("Key Creation Context %s Assigned"), data->exec_context); send_text(pamh, msg, debug); } #endif if (err && security_getenforce() == 1) return PAM_SESSION_ERR; return PAM_SUCCESS; } static int create_context(pam_handle_t *pamh, int argc, const char **argv, int debug, int verbose) { int i; int ttys = 1; int select_context = 0; int use_current_range = 0; int env_params = 0; module_data_t *data; /* Parse arguments. */ for (i = 0; i < argc; i++) { if (strcmp(argv[i], "nottys") == 0) { ttys = 0; } if (strcmp(argv[i], "select_context") == 0) { select_context = 1; } if (strcmp(argv[i], "use_current_range") == 0) { use_current_range = 1; } if (strcmp(argv[i], "env_params") == 0) { env_params = 1; } } if (is_selinux_enabled() <= 0) { if (debug) pam_syslog(pamh, LOG_NOTICE, "SELinux is not enabled"); return PAM_SUCCESS; } if (select_context && env_params) { pam_syslog(pamh, LOG_ERR, "select_context cannot be used with env_params"); select_context = 0; } if (!(data = calloc(1, sizeof(*data)))) { pam_syslog(pamh, LOG_ERR, "Out of memory"); return PAM_BUF_ERR; } i = compute_exec_context(pamh, data, select_context, use_current_range, env_params, debug); if (i != PAM_SUCCESS) { free_module_data(data); return i; } if (!data->exec_context) { free_module_data(data); return (security_getenforce() == 1) ? PAM_SESSION_ERR : PAM_SUCCESS; } if (ttys && (i = compute_tty_context(pamh, data)) != PAM_SUCCESS) { free_module_data(data); return i; } if ((i = pam_set_data(pamh, DATANAME, data, cleanup)) != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "Error saving context: %m"); free_module_data(data); return i; } return set_context(pamh, data, debug, verbose); } PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { /* Fail by default. */ return PAM_AUTH_ERR; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { const module_data_t *data; int i, debug = 0, verbose = 0, close_session = 0, restore = 0; /* Parse arguments. */ for (i = 0; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) { debug = 1; } if (strcmp(argv[i], "verbose") == 0) { verbose = 1; } if (strcmp(argv[i], "close") == 0) { close_session = 1; } if (strcmp(argv[i], "restore") == 0) { restore = 1; } } if (debug) pam_syslog(pamh, LOG_NOTICE, "Open Session"); /* Is this module supposed to execute close_session only? */ if (close_session) return PAM_SUCCESS; data = get_module_data(pamh); /* Is this module supposed only to restore original context? */ if (restore) return restore_context(pamh, data, debug); /* If there is a saved context, this module is supposed to set it again. */ return data ? set_context(pamh, data, debug, verbose) : create_context(pamh, argc, argv, debug, verbose); } PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int i, debug = 0, open_session = 0; /* Parse arguments. */ for (i = 0; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) { debug = 1; } if (strcmp(argv[i], "open") == 0) { open_session = 1; } } if (debug) pam_syslog(pamh, LOG_NOTICE, "Close Session"); /* Is this module supposed to execute open_session only? */ if (open_session) return PAM_SUCCESS; /* Restore original context. */ return restore_context(pamh, get_module_data(pamh), debug); } Linux-PAM-1.1.8/modules/pam_selinux/pam_selinux_check.c0000644000000000000000000001255112160065211017741 00000000000000/****************************************************************************** * A module for Linux-PAM that will set the default security context after login * via PAM. * * Copyright (c) 2003 Red Hat, Inc. * Written by Dan Walsh * * 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. * */ /************************************************************************ * * All PAM code goes in this section. * ************************************************************************/ #include "config.h" #include #include #include /* for getuid(), exit(), getopt() */ #include #include /* for wait() */ #include /* for PAM functions */ #include /* for misc_conv PAM utility function */ #define SERVICE_NAME "pam_selinux_check" /* the name of this program for PAM */ /* The file containing the context to run * the scripts under. */ int authenticate_via_pam( const char *user , pam_handle_t **pamh); /* authenticate_via_pam() * * in: user * out: nothing * return: value condition * ----- --------- * 1 pam thinks that the user authenticated themselves properly * 0 otherwise * * this function uses pam to authenticate the user running this * program. this is the only function in this program that makes pam * calls. * */ int authenticate_via_pam( const char *user , pam_handle_t **pamh) { struct pam_conv *conv; int result = 0; /* our result, set to 0 (not authenticated) by default */ /* this is a jump table of functions for pam to use when it wants to * * communicate with the user. we'll be using misc_conv(), which is * * provided for us via pam_misc.h. */ struct pam_conv pam_conversation = { misc_conv, NULL }; conv = &pam_conversation; /* make `p_pam_handle' a valid pam handle so we can use it when * * calling pam functions. */ if( PAM_SUCCESS != pam_start( SERVICE_NAME, user, conv, pamh ) ) { fprintf( stderr, _("failed to initialize PAM\n") ); exit( -1 ); } if( PAM_SUCCESS != pam_set_item(*pamh, PAM_RUSER, user)) { fprintf( stderr, _("failed to pam_set_item()\n") ); exit( -1 ); } /* Ask PAM to authenticate the user running this program */ if( PAM_SUCCESS == pam_authenticate(*pamh,0) ) { if ( PAM_SUCCESS == pam_open_session(*pamh, 0) ) result = 1; /* user authenticated OK! */ } return( result ); } /* authenticate_via_pam() */ int main (int argc, char **argv) { pam_handle_t *pamh; int childPid; if (argc < 1) exit (-1); if (!authenticate_via_pam(argv[1],&pamh)) exit(-1); childPid = fork(); if (childPid < 0) { /* error in fork() */ fprintf(stderr, _("login: failure forking: %m")); pam_close_session(pamh, 0); /* We're done with PAM. Free `pam_handle'. */ pam_end( pamh, PAM_SUCCESS ); exit(0); } if (childPid) { close(0); close(1); close(2); struct sigaction sa; memset(&sa,0,sizeof(sa)); sa.sa_handler = SIG_IGN; sigaction(SIGQUIT, &sa, NULL); sigaction(SIGINT, &sa, NULL); while(wait(NULL) == -1 && errno == EINTR) /**/ ; openlog("login", LOG_ODELAY, LOG_AUTHPRIV); pam_close_session(pamh, 0); /* We're done with PAM. Free `pam_handle'. */ pam_end( pamh, PAM_SUCCESS ); exit(0); } argv[0]=strdup ("/bin/sh"); argv[1]=NULL; /* NOTE: The environment has not been sanitized. LD_PRELOAD and other fun * things could be set. */ execv("/bin/sh",argv); fprintf(stderr,"Failure\n"); return 0; } Linux-PAM-1.1.8/modules/pam_selinux/Makefile.am0000644000000000000000000000210212160065211016137 00000000000000# # Copyright (c) 2005, 2006, 2007 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(XMLS) pam_selinux.8 pam_selinux_check.8 \ tst-pam_selinux if HAVE_LIBSELINUX TESTS = tst-pam_selinux man_MANS = pam_selinux.8 endif XMLS = README.xml pam_selinux.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -I$(top_srcdir)/libpam_misc/include pam_selinux_la_LDFLAGS = -no-undefined -avoid-version -module pam_selinux_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBSELINUX@ @LIBAUDIT@ if HAVE_VERSIONING pam_selinux_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif if HAVE_LIBSELINUX securelib_LTLIBRARIES = pam_selinux.la noinst_PROGRAMS = pam_selinux_check pam_selinux_check_LDADD = $(top_builddir)/libpam/libpam.la \ $(top_builddir)/libpam_misc/libpam_misc.la endif if ENABLE_REGENERATE_MAN noinst_DATA = README pam_selinux.8 README: pam_selinux.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_selinux/README0000644000000000000000000000553512216527610015010 00000000000000pam_selinux — PAM module to set the default security context ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_selinux is a PAM module that sets up the default SELinux security context for the next executed process. When a new session is started, the open_session part of the module computes and sets up the execution security context used for the next execve(2) call, the file security context for the controlling terminal, and the security context used for creating a new kernel keyring. When the session is ended, the close_session part of the module restores old security contexts that were in effect before the change made by the open_session part of the module. Adding pam_selinux into the PAM stack might disrupt behavior of other PAM modules which execute applications. To avoid that, pam_selinux.so open should be placed after such modules in the PAM stack, and pam_selinux.so close should be placed before them. When such a placement is not feasible, pam_selinux.so restore could be used to temporary restore original security contexts. OPTIONS open Only execute the open_session part of the module. close Only execute the close_session part of the module. restore In open_session part of the module, temporarily restore the security contexts as they were before the previous call of the module. Another call of this module without the restore option will set up the new security contexts again. nottys Do not setup security context of the controlling terminal. debug Turn on debug messages via syslog(3). verbose Attempt to inform the user when security context is set. select_context Attempt to ask the user for a custom security context role. If MLS is on, ask also for sensitivity level. env_params Attempt to obtain a custom security context role from PAM environment. If MLS is on, obtain also sensitivity level. This option and the select_context option are mutually exclusive. The respective PAM environment variables are SELINUX_ROLE_REQUESTED, SELINUX_LEVEL_REQUESTED, and SELINUX_USE_CURRENT_RANGE. The first two variables are self describing and the last one if set to 1 makes the PAM module behave as if the use_current_range was specified on the command line of the module. use_current_range Use the sensitivity level of the current process for the user context instead of the default level. Also suppresses asking of the sensitivity level from the user or obtaining it from PAM environment. EXAMPLES auth required pam_unix.so session required pam_permit.so session optional pam_selinux.so AUTHOR pam_selinux was written by Dan Walsh . Linux-PAM-1.1.8/modules/pam_selinux/Makefile.in0000644000000000000000000006333012216527537016202 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2007 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map @HAVE_LIBSELINUX_TRUE@noinst_PROGRAMS = pam_selinux_check$(EXEEXT) subdir = modules/pam_selinux DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_selinux_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_selinux_la_SOURCES = pam_selinux.c pam_selinux_la_OBJECTS = pam_selinux.lo pam_selinux_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(pam_selinux_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_LIBSELINUX_TRUE@am_pam_selinux_la_rpath = -rpath $(securelibdir) PROGRAMS = $(noinst_PROGRAMS) pam_selinux_check_SOURCES = pam_selinux_check.c pam_selinux_check_OBJECTS = pam_selinux_check.$(OBJEXT) @HAVE_LIBSELINUX_TRUE@pam_selinux_check_DEPENDENCIES = \ @HAVE_LIBSELINUX_TRUE@ $(top_builddir)/libpam/libpam.la \ @HAVE_LIBSELINUX_TRUE@ $(top_builddir)/libpam_misc/libpam_misc.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_selinux.c pam_selinux_check.c DIST_SOURCES = pam_selinux.c pam_selinux_check.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(XMLS) pam_selinux.8 pam_selinux_check.8 \ tst-pam_selinux @HAVE_LIBSELINUX_TRUE@TESTS = tst-pam_selinux @HAVE_LIBSELINUX_TRUE@man_MANS = pam_selinux.8 XMLS = README.xml pam_selinux.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -I$(top_srcdir)/libpam_misc/include pam_selinux_la_LDFLAGS = -no-undefined -avoid-version -module \ $(am__append_1) pam_selinux_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBSELINUX@ @LIBAUDIT@ @HAVE_LIBSELINUX_TRUE@securelib_LTLIBRARIES = pam_selinux.la @HAVE_LIBSELINUX_TRUE@pam_selinux_check_LDADD = $(top_builddir)/libpam/libpam.la \ @HAVE_LIBSELINUX_TRUE@ $(top_builddir)/libpam_misc/libpam_misc.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README pam_selinux.8 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_selinux/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_selinux/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_selinux.la: $(pam_selinux_la_OBJECTS) $(pam_selinux_la_DEPENDENCIES) $(pam_selinux_la_LINK) $(am_pam_selinux_la_rpath) $(pam_selinux_la_OBJECTS) $(pam_selinux_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pam_selinux_check$(EXEEXT): $(pam_selinux_check_OBJECTS) $(pam_selinux_check_DEPENDENCIES) @rm -f pam_selinux_check$(EXEEXT) $(LINK) $(pam_selinux_check_OBJECTS) $(pam_selinux_check_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_selinux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_selinux_check.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ clean-securelibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS \ clean-securelibLTLIBRARIES 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-man8 \ install-pdf install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_selinux.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_selinux/pam_selinux_check.80000644000000000000000000000131612160065211017663 00000000000000.TH pam_selinux_check 8 2002/05/23 "Red Hat Linux" "System Administrator's Manual" .SH NAME pam_selinux_check \- login program to test pam_selinux.so .SH SYNOPSIS .B pam_selinux_check [user] .br .SH DESCRIPTION With no arguments, .B pam_selinux_check will prompt for user .SH OPTIONS .IP target_user The user to login as. .SH DIAGNOSTICS You must setup a /etc/pam.d/pam_selinux_check file, in order for the check to work. When checking if a selinux is valid, .B pam_selinux_check returns an exit code of 0 for success and > 0 on error: .nf 1: Authentication failure .fi .SH SEE ALSO pam_selinux(8) .SH BUGS Let's hope not, but if you find any, please email the author. .SH AUTHOR Dan Walsh Linux-PAM-1.1.8/modules/pam_selinux/pam_selinux.80000644000000000000000000001132512160066773016545 00000000000000'\" t .\" Title: pam_selinux .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 06/18/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_SELINUX" "8" "06/18/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_selinux \- PAM module to set the default security context .SH "SYNOPSIS" .HP \w'\fBpam_selinux\&.so\fR\ 'u \fBpam_selinux\&.so\fR [open] [close] [restore] [nottys] [debug] [verbose] [select_context] [env_params] [use_current_range] .SH "DESCRIPTION" .PP pam_selinux is a PAM module that sets up the default SELinux security context for the next executed process\&. .PP When a new session is started, the open_session part of the module computes and sets up the execution security context used for the next \fBexecve\fR(2) call, the file security context for the controlling terminal, and the security context used for creating a new kernel keyring\&. .PP When the session is ended, the close_session part of the module restores old security contexts that were in effect before the change made by the open_session part of the module\&. .PP Adding pam_selinux into the PAM stack might disrupt behavior of other PAM modules which execute applications\&. To avoid that, \fIpam_selinux\&.so open\fR should be placed after such modules in the PAM stack, and \fIpam_selinux\&.so close\fR should be placed before them\&. When such a placement is not feasible, \fIpam_selinux\&.so restore\fR could be used to temporary restore original security contexts\&. .SH "OPTIONS" .PP \fBopen\fR .RS 4 Only execute the open_session part of the module\&. .RE .PP \fBclose\fR .RS 4 Only execute the close_session part of the module\&. .RE .PP \fBrestore\fR .RS 4 In open_session part of the module, temporarily restore the security contexts as they were before the previous call of the module\&. Another call of this module without the restore option will set up the new security contexts again\&. .RE .PP \fBnottys\fR .RS 4 Do not setup security context of the controlling terminal\&. .RE .PP \fBdebug\fR .RS 4 Turn on debug messages via \fBsyslog\fR(3)\&. .RE .PP \fBverbose\fR .RS 4 Attempt to inform the user when security context is set\&. .RE .PP \fBselect_context\fR .RS 4 Attempt to ask the user for a custom security context role\&. If MLS is on, ask also for sensitivity level\&. .RE .PP \fBenv_params\fR .RS 4 Attempt to obtain a custom security context role from PAM environment\&. If MLS is on, obtain also sensitivity level\&. This option and the select_context option are mutually exclusive\&. The respective PAM environment variables are \fISELINUX_ROLE_REQUESTED\fR, \fISELINUX_LEVEL_REQUESTED\fR, and \fISELINUX_USE_CURRENT_RANGE\fR\&. The first two variables are self describing and the last one if set to 1 makes the PAM module behave as if the use_current_range was specified on the command line of the module\&. .RE .PP \fBuse_current_range\fR .RS 4 Use the sensitivity level of the current process for the user context instead of the default level\&. Also suppresses asking of the sensitivity level from the user or obtaining it from PAM environment\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBsession\fR module type is provided\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 The security context was set successfully\&. .RE .PP PAM_SESSION_ERR .RS 4 Unable to get or set a valid context\&. .RE .PP PAM_USER_UNKNOWN .RS 4 The user is not known to the system\&. .RE .PP PAM_BUF_ERR .RS 4 Memory allocation error\&. .RE .SH "EXAMPLES" .sp .if n \{\ .RS 4 .\} .nf auth required pam_unix\&.so session required pam_permit\&.so session optional pam_selinux\&.so .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBexecve\fR(2), \fBtty\fR(4), \fBpam.d\fR(5), \fBpam\fR(8), \fBselinux\fR(8) .SH "AUTHOR" .PP pam_selinux was written by Dan Walsh \&. Linux-PAM-1.1.8/modules/pam_selinux/README.xml0000644000000000000000000000223012160065211015564 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_selinux.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_selinux-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_tty_audit/0000755000000000000000000000000012216542312014513 500000000000000Linux-PAM-1.1.8/modules/pam_tty_audit/pam_tty_audit.c0000644000000000000000000002262512207335224017453 00000000000000/* Copyright © 2007, 2008 Red Hat, Inc. All rights reserved. Red Hat author: Miloslav Trmač Redistribution and use in source and binary forms of Linux-PAM, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain any existing copyright notice, and this entire permission notice in its entirety, including the disclaimer of warranties. 2. Redistributions in binary form must reproduce all prior and current copyright notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of any author may not be used to endorse or promote products derived from this software without their specific prior written permission. ALTERNATIVELY, this product may be distributed under the terms of the GNU General Public License, in which case the provisions of the GNU GPL are required INSTEAD OF the above restrictions. (This clause is necessary due to a potential conflict between the GNU 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(S) 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. */ #include #include #include #include #include #include #include #include #include #define PAM_SM_SESSION #include #include #include #define DATANAME "pam_tty_audit_last_state" /* Open an audit netlink socket */ static int nl_open (void) { return socket (AF_NETLINK, SOCK_RAW, NETLINK_AUDIT); } static int nl_send (int fd, unsigned type, unsigned flags, const void *data, size_t size) { struct sockaddr_nl addr; struct msghdr msg; struct nlmsghdr nlm; struct iovec iov[2]; ssize_t res; nlm.nlmsg_len = NLMSG_LENGTH (size); nlm.nlmsg_type = type; nlm.nlmsg_flags = NLM_F_REQUEST | flags; nlm.nlmsg_seq = 0; nlm.nlmsg_pid = 0; iov[0].iov_base = &nlm; iov[0].iov_len = sizeof (nlm); iov[1].iov_base = (void *)data; iov[1].iov_len = size; addr.nl_family = AF_NETLINK; addr.nl_pid = 0; addr.nl_groups = 0; msg.msg_name = &addr; msg.msg_namelen = sizeof (addr); msg.msg_iov = iov; msg.msg_iovlen = 2; msg.msg_control = NULL; msg.msg_controllen = 0; msg.msg_flags = 0; res = sendmsg (fd, &msg, 0); if (res == -1) return -1; if ((size_t)res != nlm.nlmsg_len) { errno = EIO; return -1; } return 0; } static int nl_recv (int fd, unsigned type, void *buf, size_t size) { struct sockaddr_nl addr; struct msghdr msg; struct nlmsghdr nlm; struct iovec iov[2]; ssize_t res; again: iov[0].iov_base = &nlm; iov[0].iov_len = sizeof (nlm); msg.msg_name = &addr; msg.msg_namelen = sizeof (addr); msg.msg_iov = iov; msg.msg_iovlen = 1; msg.msg_control = NULL; msg.msg_controllen = 0; if (type != NLMSG_ERROR) { res = recvmsg (fd, &msg, MSG_PEEK); if (res == -1) return -1; if (res != NLMSG_LENGTH (0)) { errno = EIO; return -1; } if (nlm.nlmsg_type == NLMSG_ERROR) { struct nlmsgerr err; iov[1].iov_base = &err; iov[1].iov_len = sizeof (err); msg.msg_iovlen = 2; res = recvmsg (fd, &msg, 0); if (res == -1) return -1; if ((size_t)res != NLMSG_LENGTH (sizeof (err)) || nlm.nlmsg_type != NLMSG_ERROR) { errno = EIO; return -1; } if (err.error == 0) goto again; errno = -err.error; return -1; } } if (size != 0) { iov[1].iov_base = buf; iov[1].iov_len = size; msg.msg_iovlen = 2; } res = recvmsg (fd, &msg, 0); if (res == -1) return -1; if ((size_t)res != NLMSG_LENGTH (size) || nlm.nlmsg_type != type) { errno = EIO; return -1; } return 0; } static int nl_recv_ack (int fd) { struct nlmsgerr err; if (nl_recv (fd, NLMSG_ERROR, &err, sizeof (err)) != 0) return -1; if (err.error != 0) { errno = -err.error; return -1; } return 0; } static void cleanup_old_status (pam_handle_t *pamh, void *data, int error_status) { (void)pamh; (void)error_status; free (data); } int pam_sm_open_session (pam_handle_t *pamh, int flags, int argc, const char **argv) { enum command { CMD_NONE, CMD_ENABLE, CMD_DISABLE }; enum command command; struct audit_tty_status *old_status, new_status; const char *user; int i, fd, open_only; #ifdef HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD int log_passwd; #endif /* HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD */ (void)flags; if (pam_get_user (pamh, &user, NULL) != PAM_SUCCESS) { pam_syslog (pamh, LOG_ERR, "error determining target user's name"); return PAM_SESSION_ERR; } command = CMD_NONE; open_only = 0; #ifdef HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD log_passwd = 0; #endif /* HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD */ for (i = 0; i < argc; i++) { if (strncmp (argv[i], "enable=", 7) == 0 || strncmp (argv[i], "disable=", 8) == 0) { enum command this_command; char *copy, *tok_data, *tok; this_command = *argv[i] == 'e' ? CMD_ENABLE : CMD_DISABLE; copy = strdup (strchr (argv[i], '=') + 1); if (copy == NULL) return PAM_SESSION_ERR; for (tok = strtok_r (copy, ",", &tok_data); tok != NULL; tok = strtok_r (NULL, ",", &tok_data)) { if (fnmatch (tok, user, 0) == 0) { command = this_command; break; } } free (copy); } else if (strcmp (argv[i], "open_only") == 0) open_only = 1; else if (strcmp (argv[i], "log_passwd") == 0) #ifdef HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD log_passwd = 1; #else /* HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD */ pam_syslog (pamh, LOG_WARNING, "The log_passwd option was not available at compile time."); #warning "pam_tty_audit: The log_passwd option is not available. Please upgrade your headers/kernel." #endif /* HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD */ else { pam_syslog (pamh, LOG_ERR, "unknown option `%s'", argv[i]); } } if (command == CMD_NONE) return PAM_SUCCESS; old_status = malloc (sizeof (*old_status)); if (old_status == NULL) return PAM_SESSION_ERR; fd = nl_open (); if (fd == -1 || nl_send (fd, AUDIT_TTY_GET, 0, NULL, 0) != 0 || nl_recv (fd, AUDIT_TTY_GET, old_status, sizeof (*old_status)) != 0) { pam_syslog (pamh, LOG_ERR, "error reading current audit status: %m"); if (fd != -1) close (fd); free (old_status); return PAM_SESSION_ERR; } new_status.enabled = (command == CMD_ENABLE ? 1 : 0); #ifdef HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD new_status.log_passwd = log_passwd; #endif /* HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD */ if (old_status->enabled == new_status.enabled #ifdef HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD && old_status->log_passwd == new_status.log_passwd #endif /* HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD */ ) { open_only = 1; /* to clean up old_status */ goto ok_fd; } if (open_only == 0 && pam_set_data (pamh, DATANAME, old_status, cleanup_old_status) != PAM_SUCCESS) { pam_syslog (pamh, LOG_ERR, "error saving old audit status"); close (fd); free (old_status); return PAM_SESSION_ERR; } if (nl_send (fd, AUDIT_TTY_SET, NLM_F_ACK, &new_status, sizeof (new_status)) != 0 || nl_recv_ack (fd) != 0) { pam_syslog (pamh, LOG_ERR, "error setting current audit status: %m"); close (fd); if (open_only != 0) free (old_status); return PAM_SESSION_ERR; } /* Fall through */ ok_fd: close (fd); pam_syslog (pamh, LOG_DEBUG, "changed status from %d to %d", old_status->enabled, new_status.enabled); if (open_only != 0) free (old_status); return PAM_SUCCESS; } int pam_sm_close_session (pam_handle_t *pamh, int flags, int argc, const char **argv) { const void *status_; (void)flags; (void)argc; (void)argv; if (pam_get_data (pamh, DATANAME, &status_) == PAM_SUCCESS) { const struct audit_tty_status *status; int fd; status = status_; fd = nl_open (); if (fd == -1 || nl_send (fd, AUDIT_TTY_SET, NLM_F_ACK, status, sizeof (*status)) != 0 || nl_recv_ack (fd) != 0) { pam_syslog (pamh, LOG_ERR, "error restoring audit status: %m"); if (fd != -1) close (fd); return PAM_SESSION_ERR; } close (fd); pam_syslog (pamh, LOG_DEBUG, "restored status to %d", status->enabled); } return PAM_SUCCESS; } /* static module data */ #ifdef PAM_STATIC struct pam_module _pam_tty_audit_modstruct = { "pam_tty_audit", NULL, NULL, NULL, pam_sm_open_session, pam_sm_close_session, NULL }; #endif Linux-PAM-1.1.8/modules/pam_tty_audit/tst-pam_tty_audit0000755000000000000000000000007012160065211020025 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_tty_audit.so Linux-PAM-1.1.8/modules/pam_tty_audit/Makefile.am0000644000000000000000000000146012160065211016464 00000000000000# # Copyright (c) 2005, 2006, 2009, 2010 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README pam_tty_audit.8 $(XMLS) tst-pam_tty_audit if HAVE_AUDIT_TTY_STATUS TESTS = tst-pam_tty_audit man_MANS = pam_tty_audit.8 endif XMLS = README.xml pam_tty_audit.8.xml securelibdir = $(SECUREDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif if HAVE_AUDIT_TTY_STATUS pam_tty_audit_la_LIBADD = $(top_builddir)/libpam/libpam.la securelib_LTLIBRARIES = pam_tty_audit.la endif if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_tty_audit.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_tty_audit/pam_tty_audit.8.xml0000644000000000000000000001270212207335224020172 00000000000000 pam_tty_audit 8 Linux-PAM Manual pam_tty_audit Enable or disable TTY auditing for specified users pam_tty_audit.so disable=patterns enable=patterns DESCRIPTION The pam_tty_audit PAM module is used to enable or disable TTY auditing. By default, the kernel does not audit input on any TTY. OPTIONS For each user matching one of comma-separated glob , disable TTY auditing. This overrides any previous option matching the same user name on the command line. For each user matching one of comma-separated glob , enable TTY auditing. This overrides any previous option matching the same user name on the command line. Set the TTY audit flag when opening the session, but do not restore it when closing the session. Using this option is necessary for some services that don't fork() to run the authenticated session, such as sudo. Log keystrokes when ECHO mode is off but ICANON mode is active. This is the mode in which the tty is placed during password entry. By default, passwords are not logged. This option may not be available on older kernels (3.9?). MODULE TYPES PROVIDED Only the session type is supported. RETURN VALUES PAM_SESSION_ERR Error reading or modifying the TTY audit flag. See the system log for more details. PAM_SUCCESS Success. NOTES When TTY auditing is enabled, it is inherited by all processes started by that user. In particular, daemons restarted by an user will still have TTY auditing enabled, and audit TTY input even by other users unless auditing for these users is explicitly disabled. Therefore, it is recommended to use as the first option for most daemons using PAM. To view the data that was logged by the kernel to audit use the command aureport --tty. EXAMPLES Audit all administrative actions. session required pam_tty_audit.so disable=* enable=root SEE ALSO aureport8 , pam.conf5 , pam.d5 , pam8 AUTHOR pam_tty_audit was written by Miloslav Trmač <mitr@redhat.com>. The log_passwd option was added by Richard Guy Briggs <rgb@redhat.com>. Linux-PAM-1.1.8/modules/pam_tty_audit/README0000644000000000000000000000401712216527614015325 00000000000000pam_tty_audit — Enable or disable TTY auditing for specified users ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_tty_audit PAM module is used to enable or disable TTY auditing. By default, the kernel does not audit input on any TTY. OPTIONS disable=patterns For each user matching one of comma-separated glob patterns, disable TTY auditing. This overrides any previous enable option matching the same user name on the command line. enable=patterns For each user matching one of comma-separated glob patterns, enable TTY auditing. This overrides any previous disable option matching the same user name on the command line. open_only Set the TTY audit flag when opening the session, but do not restore it when closing the session. Using this option is necessary for some services that don't fork() to run the authenticated session, such as sudo. log_passwd Log keystrokes when ECHO mode is off but ICANON mode is active. This is the mode in which the tty is placed during password entry. By default, passwords are not logged. This option may not be available on older kernels (3.9?). NOTES When TTY auditing is enabled, it is inherited by all processes started by that user. In particular, daemons restarted by an user will still have TTY auditing enabled, and audit TTY input even by other users unless auditing for these users is explicitly disabled. Therefore, it is recommended to use disable=* as the first option for most daemons using PAM. To view the data that was logged by the kernel to audit use the command aureport --tty. EXAMPLES Audit all administrative actions. session required pam_tty_audit.so disable=* enable=root AUTHOR pam_tty_audit was written by Miloslav Trmač . The log_passwd option was added by Richard Guy Briggs . Linux-PAM-1.1.8/modules/pam_tty_audit/pam_tty_audit.80000644000000000000000000000731312211635016017372 00000000000000'\" t .\" Title: pam_tty_audit .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/04/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_TTY_AUDIT" "8" "09/04/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_tty_audit \- Enable or disable TTY auditing for specified users .SH "SYNOPSIS" .HP \w'\fBpam_tty_audit\&.so\fR\ 'u \fBpam_tty_audit\&.so\fR [disable=\fIpatterns\fR] [enable=\fIpatterns\fR] .SH "DESCRIPTION" .PP The pam_tty_audit PAM module is used to enable or disable TTY auditing\&. By default, the kernel does not audit input on any TTY\&. .SH "OPTIONS" .PP \fBdisable=\fR\fB\fIpatterns\fR\fR .RS 4 For each user matching one of comma\-separated glob \fB\fIpatterns\fR\fR, disable TTY auditing\&. This overrides any previous \fBenable\fR option matching the same user name on the command line\&. .RE .PP \fBenable=\fR\fB\fIpatterns\fR\fR .RS 4 For each user matching one of comma\-separated glob \fB\fIpatterns\fR\fR, enable TTY auditing\&. This overrides any previous \fBdisable\fR option matching the same user name on the command line\&. .RE .PP \fBopen_only\fR .RS 4 Set the TTY audit flag when opening the session, but do not restore it when closing the session\&. Using this option is necessary for some services that don\*(Aqt \fBfork()\fR to run the authenticated session, such as \fBsudo\fR\&. .RE .PP \fBlog_passwd\fR .RS 4 Log keystrokes when ECHO mode is off but ICANON mode is active\&. This is the mode in which the tty is placed during password entry\&. By default, passwords are not logged\&. This option may not be available on older kernels (3\&.9?)\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBsession\fR type is supported\&. .SH "RETURN VALUES" .PP PAM_SESSION_ERR .RS 4 Error reading or modifying the TTY audit flag\&. See the system log for more details\&. .RE .PP PAM_SUCCESS .RS 4 Success\&. .RE .SH "NOTES" .PP When TTY auditing is enabled, it is inherited by all processes started by that user\&. In particular, daemons restarted by an user will still have TTY auditing enabled, and audit TTY input even by other users unless auditing for these users is explicitly disabled\&. Therefore, it is recommended to use \fBdisable=*\fR as the first option for most daemons using PAM\&. .PP To view the data that was logged by the kernel to audit use the command \fBaureport \-\-tty\fR\&. .SH "EXAMPLES" .PP Audit all administrative actions\&. .sp .if n \{\ .RS 4 .\} .nf session required pam_tty_audit\&.so disable=* enable=root .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBaureport\fR(8), \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_tty_audit was written by Miloslav Trmač \&. The log_passwd option was added by Richard Guy Briggs \&. Linux-PAM-1.1.8/modules/pam_tty_audit/Makefile.in0000644000000000000000000006064612216527540016522 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009, 2010 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_tty_audit DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) @HAVE_AUDIT_TTY_STATUS_TRUE@pam_tty_audit_la_DEPENDENCIES = \ @HAVE_AUDIT_TTY_STATUS_TRUE@ $(top_builddir)/libpam/libpam.la pam_tty_audit_la_SOURCES = pam_tty_audit.c pam_tty_audit_la_OBJECTS = pam_tty_audit.lo @HAVE_AUDIT_TTY_STATUS_TRUE@am_pam_tty_audit_la_rpath = -rpath \ @HAVE_AUDIT_TTY_STATUS_TRUE@ $(securelibdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_tty_audit.c DIST_SOURCES = pam_tty_audit.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README pam_tty_audit.8 $(XMLS) tst-pam_tty_audit @HAVE_AUDIT_TTY_STATUS_TRUE@TESTS = tst-pam_tty_audit @HAVE_AUDIT_TTY_STATUS_TRUE@man_MANS = pam_tty_audit.8 XMLS = README.xml pam_tty_audit.8.xml securelibdir = $(SECUREDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) @HAVE_AUDIT_TTY_STATUS_TRUE@pam_tty_audit_la_LIBADD = $(top_builddir)/libpam/libpam.la @HAVE_AUDIT_TTY_STATUS_TRUE@securelib_LTLIBRARIES = pam_tty_audit.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_tty_audit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_tty_audit/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_tty_audit.la: $(pam_tty_audit_la_OBJECTS) $(pam_tty_audit_la_DEPENDENCIES) $(LINK) $(am_pam_tty_audit_la_rpath) $(pam_tty_audit_la_OBJECTS) $(pam_tty_audit_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_tty_audit.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_tty_audit.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_tty_audit/README.xml0000644000000000000000000000244712160065211016115 00000000000000
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tty_audit.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_tty_audit-name"]/*)'/>
Linux-PAM-1.1.8/modules/Makefile.am0000644000000000000000000000120712160065211013620 00000000000000# # Copyright (c) 2005, 2006, 2008 Thorsten Kukuk # SUBDIRS = pam_access pam_cracklib pam_debug pam_deny pam_echo \ pam_env pam_exec pam_faildelay pam_filter pam_ftp \ pam_group pam_issue pam_keyinit pam_lastlog pam_limits \ pam_listfile pam_localuser pam_loginuid pam_mail \ pam_mkhomedir pam_motd pam_namespace pam_nologin \ pam_permit pam_pwhistory pam_rhosts pam_rootok pam_securetty \ pam_selinux pam_sepermit pam_shells pam_stress \ pam_succeed_if pam_tally pam_tally2 pam_time pam_timestamp \ pam_tty_audit pam_umask \ pam_unix pam_userdb pam_warn pam_wheel pam_xauth CLEANFILES = *~ EXTRA_DIST = modules.map Linux-PAM-1.1.8/modules/pam_tally2/0000755000000000000000000000000012216542312013714 500000000000000Linux-PAM-1.1.8/modules/pam_tally2/tallylog.h0000644000000000000000000000410112160065211015624 00000000000000/* * Copyright 2006, Red Hat, Inc. * 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 Red Hat, Inc. 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 RED HAT, INC. 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. */ /* * tallylog.h - login failure data file format * * The new login failure file is not compatible with the old faillog(8) format * Each record in the file represents a separate UID and the file * is indexed in that fashion. */ #ifndef _TALLYLOG_H #define _TALLYLOG_H #include struct tallylog { char fail_line[52]; /* rhost or tty of last failure */ uint16_t reserved; /* reserved for future use */ uint16_t fail_cnt; /* failures since last success */ uint64_t fail_time; /* time of last failure */ }; /* 64 bytes / entry */ #endif Linux-PAM-1.1.8/modules/pam_tally2/pam_tally2.c0000644000000000000000000007117112160065211016047 00000000000000/* * pam_tally2.c * */ /* By Tim Baverstock , Multi Media Machine Ltd. * 5 March 1997 * * Stuff stolen from pam_rootok and pam_listfile * * Changes by Tomas Mraz 5 January 2005, 26 January 2006 * Audit option added for Tomas patch by Sebastien Tricaud 13 January 2005 * Portions Copyright 2006, Red Hat, Inc. * Portions Copyright 1989 - 1993, Julianne Frances Haugh * 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. */ #include "config.h" #if defined(MAIN) && defined(MEMORY_DEBUG) # undef exit #endif /* defined(MAIN) && defined(MEMORY_DEBUG) */ #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_LIBAUDIT #include #endif #include #include #include #include #include #include #include "tallylog.h" #ifndef TRUE #define TRUE 1L #define FALSE 0L #endif #ifndef HAVE_FSEEKO #define fseeko fseek #endif /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #ifndef MAIN #define PAM_SM_AUTH #define PAM_SM_ACCOUNT /* #define PAM_SM_SESSION */ /* #define PAM_SM_PASSWORD */ #include #endif #include #include /*---------------------------------------------------------------------*/ #define DEFAULT_LOGFILE "/var/log/tallylog" #define MODULE_NAME "pam_tally2" #define tally_t uint16_t #define TALLY_HI ((tally_t)~0L) struct tally_options { const char *filename; tally_t deny; long lock_time; long unlock_time; long root_unlock_time; unsigned int ctrl; }; #define PHASE_UNKNOWN 0 #define PHASE_AUTH 1 #define PHASE_ACCOUNT 2 #define PHASE_SESSION 3 #define OPT_MAGIC_ROOT 01 #define OPT_FAIL_ON_ERROR 02 #define OPT_DENY_ROOT 04 #define OPT_QUIET 040 #define OPT_AUDIT 0100 #define OPT_NOLOGNOTICE 0400 #define OPT_SERIALIZE 01000 #define MAX_LOCK_WAITING_TIME 10 /*---------------------------------------------------------------------*/ /* some syslogging */ #ifdef MAIN #define pam_syslog tally_log static void tally_log (const pam_handle_t *pamh UNUSED, int priority UNUSED, const char *fmt, ...) { va_list args; va_start(args, fmt); fprintf(stderr, "%s: ", MODULE_NAME); vfprintf(stderr, fmt, args); fprintf(stderr,"\n"); va_end(args); } #define pam_modutil_getpwnam(pamh, user) getpwnam(user) #endif /*---------------------------------------------------------------------*/ /* --- Support function: parse arguments --- */ #ifndef MAIN static void log_phase_no_auth(pam_handle_t *pamh, int phase, const char *argv) { if ( phase != PHASE_AUTH ) { pam_syslog(pamh, LOG_ERR, "option %s allowed in auth phase only", argv); } } static int tally_parse_args(pam_handle_t *pamh, struct tally_options *opts, int phase, int argc, const char **argv) { memset(opts, 0, sizeof(*opts)); opts->filename = DEFAULT_LOGFILE; opts->ctrl = OPT_FAIL_ON_ERROR; opts->root_unlock_time = -1; for ( ; argc-- > 0; ++argv ) { if ( ! strncmp( *argv, "file=", 5 ) ) { const char *from = *argv + 5; if ( *from!='/' ) { pam_syslog(pamh, LOG_ERR, "filename not /rooted; %s", *argv); return PAM_AUTH_ERR; } opts->filename = from; } else if ( ! strcmp( *argv, "onerr=fail" ) ) { opts->ctrl |= OPT_FAIL_ON_ERROR; } else if ( ! strcmp( *argv, "onerr=succeed" ) ) { opts->ctrl &= ~OPT_FAIL_ON_ERROR; } else if ( ! strcmp( *argv, "magic_root" ) ) { opts->ctrl |= OPT_MAGIC_ROOT; } else if ( ! strcmp( *argv, "serialize" ) ) { opts->ctrl |= OPT_SERIALIZE; } else if ( ! strcmp( *argv, "even_deny_root_account" ) || ! strcmp( *argv, "even_deny_root" ) ) { log_phase_no_auth(pamh, phase, *argv); opts->ctrl |= OPT_DENY_ROOT; } else if ( ! strncmp( *argv, "deny=", 5 ) ) { log_phase_no_auth(pamh, phase, *argv); if ( sscanf((*argv)+5,"%hu",&opts->deny) != 1 ) { pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); return PAM_AUTH_ERR; } } else if ( ! strncmp( *argv, "lock_time=", 10 ) ) { log_phase_no_auth(pamh, phase, *argv); if ( sscanf((*argv)+10,"%ld",&opts->lock_time) != 1 ) { pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); return PAM_AUTH_ERR; } } else if ( ! strncmp( *argv, "unlock_time=", 12 ) ) { log_phase_no_auth(pamh, phase, *argv); if ( sscanf((*argv)+12,"%ld",&opts->unlock_time) != 1 ) { pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); return PAM_AUTH_ERR; } } else if ( ! strncmp( *argv, "root_unlock_time=", 17 ) ) { log_phase_no_auth(pamh, phase, *argv); if ( sscanf((*argv)+17,"%ld",&opts->root_unlock_time) != 1 ) { pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); return PAM_AUTH_ERR; } opts->ctrl |= OPT_DENY_ROOT; /* even_deny_root implied */ } else if ( ! strcmp( *argv, "quiet" ) || ! strcmp ( *argv, "silent")) { opts->ctrl |= OPT_QUIET; } else if ( ! strcmp ( *argv, "no_log_info") ) { opts->ctrl |= OPT_NOLOGNOTICE; } else if ( ! strcmp ( *argv, "audit") ) { opts->ctrl |= OPT_AUDIT; } else { pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } } if (opts->root_unlock_time == -1) opts->root_unlock_time = opts->unlock_time; return PAM_SUCCESS; } #endif /* #ifndef MAIN */ /*---------------------------------------------------------------------*/ /* --- Support function: get uid (and optionally username) from PAM or cline_user --- */ #ifdef MAIN static char *cline_user=0; /* cline_user is used in the administration prog */ #endif static int pam_get_uid(pam_handle_t *pamh, uid_t *uid, const char **userp, struct tally_options *opts) { const char *user = NULL; struct passwd *pw; #ifdef MAIN user = cline_user; #else if ((pam_get_user( pamh, &user, NULL )) != PAM_SUCCESS) { user = NULL; } #endif if ( !user || !*user ) { pam_syslog(pamh, LOG_ERR, "pam_get_uid; user?"); return PAM_AUTH_ERR; } if ( ! ( pw = pam_modutil_getpwnam( pamh, user ) ) ) { opts->ctrl & OPT_AUDIT ? pam_syslog(pamh, LOG_ERR, "pam_get_uid; no such user %s", user) : pam_syslog(pamh, LOG_ERR, "pam_get_uid; no such user"); return PAM_USER_UNKNOWN; } if ( uid ) *uid = pw->pw_uid; if ( userp ) *userp = user; return PAM_SUCCESS; } /*---------------------------------------------------------------------*/ /* --- Support functions: set/get tally data --- */ #ifndef MAIN struct tally_data { time_t time; int tfile; }; static void _cleanup(pam_handle_t *pamh UNUSED, void *void_data, int error_status UNUSED) { struct tally_data *data = void_data; if (data->tfile != -1) close(data->tfile); free(data); } static void tally_set_data( pam_handle_t *pamh, time_t oldtime, int tfile ) { struct tally_data *data; if ( (data=malloc(sizeof(*data))) != NULL ) { data->time = oldtime; data->tfile = tfile; pam_set_data(pamh, MODULE_NAME, (void *)data, _cleanup); } } static int tally_get_data( pam_handle_t *pamh, time_t *oldtime, int *tfile ) { int rv; const void *void_data; const struct tally_data *data; rv = pam_get_data(pamh, MODULE_NAME, &void_data); if ( rv == PAM_SUCCESS && void_data != NULL && oldtime != NULL ) { data = void_data; *oldtime = data->time; *tfile = data->tfile; } else { rv = -1; *oldtime = 0; } return rv; } #endif /* #ifndef MAIN */ /*---------------------------------------------------------------------*/ /* --- Support function: open/create tallyfile and return tally for uid --- */ /* If on entry tallyfile doesn't exist, creation is attempted. */ static void alarm_handler(int sig UNUSED) { /* we just need to ignore it */ } static int get_tally(pam_handle_t *pamh, uid_t uid, const char *filename, int *tfile, struct tallylog *tally, unsigned int ctrl) { struct stat fileinfo; int lstat_ret; void *void_tally = tally; int preopened = 0; if (*tfile != -1) { preopened = 1; goto skip_open; } lstat_ret = lstat(filename, &fileinfo); if (lstat_ret) { *tfile=open(filename, O_APPEND|O_CREAT, S_IRUSR|S_IWUSR); /* Create file, or append-open in pathological case. */ if (*tfile == -1) { #ifndef MAIN if (errno == EACCES) { return PAM_IGNORE; /* called with insufficient access rights */ } #endif pam_syslog(pamh, LOG_ALERT, "Couldn't create %s: %m", filename); return PAM_AUTH_ERR; } lstat_ret = fstat(*tfile, &fileinfo); close(*tfile); } *tfile = -1; if ( lstat_ret ) { pam_syslog(pamh, LOG_ALERT, "Couldn't stat %s", filename); return PAM_AUTH_ERR; } if ((fileinfo.st_mode & S_IWOTH) || !S_ISREG(fileinfo.st_mode)) { /* If the file is world writable or is not a normal file, return error */ pam_syslog(pamh, LOG_ALERT, "%s is either world writable or not a normal file", filename); return PAM_AUTH_ERR; } if ((*tfile = open(filename, O_RDWR)) == -1) { #ifndef MAIN if (errno == EACCES) /* called with insufficient access rights */ return PAM_IGNORE; #endif pam_syslog(pamh, LOG_ALERT, "Error opening %s for update: %m", filename); return PAM_AUTH_ERR; } skip_open: if (lseek(*tfile, (off_t)uid*(off_t)sizeof(*tally), SEEK_SET) == (off_t)-1) { pam_syslog(pamh, LOG_ALERT, "lseek failed for %s: %m", filename); if (!preopened) { close(*tfile); *tfile = -1; } return PAM_AUTH_ERR; } if (!preopened && (ctrl & OPT_SERIALIZE)) { /* this code is not thread safe as it uses fcntl locks and alarm() so never use serialize with multithreaded services */ struct sigaction newsa, oldsa; unsigned int oldalarm; int rv; memset(&newsa, '\0', sizeof(newsa)); newsa.sa_handler = alarm_handler; sigaction(SIGALRM, &newsa, &oldsa); oldalarm = alarm(MAX_LOCK_WAITING_TIME); rv = lockf(*tfile, F_LOCK, sizeof(*tally)); /* lock failure is not fatal, we attempt to read the tally anyway */ /* reinstate the eventual old alarm handler */ if (rv == -1 && errno == EINTR) { if (oldalarm > MAX_LOCK_WAITING_TIME) { oldalarm -= MAX_LOCK_WAITING_TIME; } else if (oldalarm > 0) { oldalarm = 1; } } sigaction(SIGALRM, &oldsa, NULL); alarm(oldalarm); } if (fileinfo.st_size < (off_t)(uid+1)*(off_t)sizeof(*tally)) { memset(tally, 0, sizeof(*tally)); } else if (pam_modutil_read(*tfile, void_tally, sizeof(*tally)) != sizeof(*tally)) { memset(tally, 0, sizeof(*tally)); /* Shouldn't happen */ } tally->fail_line[sizeof(tally->fail_line)-1] = '\0'; return PAM_SUCCESS; } /*---------------------------------------------------------------------*/ /* --- Support function: update tallyfile with tally!=TALLY_HI --- */ static int set_tally(pam_handle_t *pamh, uid_t uid, const char *filename, int *tfile, struct tallylog *tally) { void *void_tally = tally; if (tally->fail_cnt != TALLY_HI) { if (lseek(*tfile, (off_t)uid * sizeof(*tally), SEEK_SET) == (off_t)-1) { pam_syslog(pamh, LOG_ALERT, "lseek failed for %s: %m", filename); return PAM_AUTH_ERR; } if (pam_modutil_write(*tfile, void_tally, sizeof(*tally)) != sizeof(*tally)) { pam_syslog(pamh, LOG_ALERT, "update (write) failed for %s: %m", filename); return PAM_AUTH_ERR; } } if (fsync(*tfile)) { pam_syslog(pamh, LOG_ALERT, "update (fsync) failed for %s: %m", filename); return PAM_AUTH_ERR; } return PAM_SUCCESS; } /*---------------------------------------------------------------------*/ /* --- PAM bits --- */ #ifndef MAIN #define RETURN_ERROR(i) return ((opts->ctrl & OPT_FAIL_ON_ERROR)?(i):(PAM_SUCCESS)) /*---------------------------------------------------------------------*/ static int tally_check (tally_t oldcnt, time_t oldtime, pam_handle_t *pamh, uid_t uid, const char *user, struct tally_options *opts, struct tallylog *tally) { int rv = PAM_SUCCESS; #ifdef HAVE_LIBAUDIT char buf[64]; int audit_fd = -1; const void *rhost = NULL, *tty = NULL; #endif if ((opts->ctrl & OPT_MAGIC_ROOT) && getuid() == 0) { return PAM_SUCCESS; } /* magic_root skips tally check */ #ifdef HAVE_LIBAUDIT audit_fd = audit_open(); /* If there is an error & audit support is in the kernel report error */ if ((audit_fd < 0) && !(errno == EINVAL || errno == EPROTONOSUPPORT || errno == EAFNOSUPPORT)) return PAM_SYSTEM_ERR; (void)pam_get_item(pamh, PAM_TTY, &tty); (void)pam_get_item(pamh, PAM_RHOST, &rhost); #endif if (opts->deny != 0 && /* deny==0 means no deny */ tally->fail_cnt > opts->deny && /* tally>deny means exceeded */ ((opts->ctrl & OPT_DENY_ROOT) || uid)) { /* even_deny stops uid check */ #ifdef HAVE_LIBAUDIT if (tally->fail_cnt == opts->deny+1) { /* First say that max number was hit. */ snprintf(buf, sizeof(buf), "pam_tally2 uid=%u ", uid); audit_log_user_message(audit_fd, AUDIT_ANOM_LOGIN_FAILURES, buf, rhost, NULL, tty, 1); } #endif if (uid) { /* Unlock time check */ if (opts->unlock_time && oldtime) { if (opts->unlock_time + oldtime <= time(NULL)) { /* ignore deny check after unlock_time elapsed */ #ifdef HAVE_LIBAUDIT snprintf(buf, sizeof(buf), "pam_tally2 uid=%u ", uid); audit_log_user_message(audit_fd, AUDIT_RESP_ACCT_UNLOCK_TIMED, buf, rhost, NULL, tty, 1); #endif rv = PAM_SUCCESS; goto cleanup; } } } else { /* Root unlock time check */ if (opts->root_unlock_time && oldtime) { if (opts->root_unlock_time + oldtime <= time(NULL)) { /* ignore deny check after unlock_time elapsed */ #ifdef HAVE_LIBAUDIT snprintf(buf, sizeof(buf), "pam_tally2 uid=%u ", uid); audit_log_user_message(audit_fd, AUDIT_RESP_ACCT_UNLOCK_TIMED, buf, rhost, NULL, tty, 1); #endif rv = PAM_SUCCESS; goto cleanup; } } } #ifdef HAVE_LIBAUDIT if (tally->fail_cnt == opts->deny+1) { /* First say that max number was hit. */ audit_log_user_message(audit_fd, AUDIT_RESP_ACCT_LOCK, buf, rhost, NULL, tty, 1); } #endif if (!(opts->ctrl & OPT_QUIET)) { pam_info(pamh, _("Account locked due to %u failed logins"), (unsigned int)tally->fail_cnt); } if (!(opts->ctrl & OPT_NOLOGNOTICE)) { pam_syslog(pamh, LOG_NOTICE, "user %s (%lu) tally %hu, deny %hu", user, (unsigned long)uid, tally->fail_cnt, opts->deny); } rv = PAM_AUTH_ERR; /* Only unconditional failure */ goto cleanup; } /* Lock time check */ if (opts->lock_time && oldtime) { if (opts->lock_time + oldtime > time(NULL)) { /* don't increase fail_cnt or update fail_time when lock_time applies */ tally->fail_cnt = oldcnt; tally->fail_time = oldtime; if (!(opts->ctrl & OPT_QUIET)) { pam_info(pamh, _("Account temporary locked (%ld seconds left)"), oldtime+opts->lock_time-time(NULL)); } if (!(opts->ctrl & OPT_NOLOGNOTICE)) { pam_syslog(pamh, LOG_NOTICE, "user %s (%lu) has time limit [%lds left]" " since last failure.", user, (unsigned long)uid, oldtime+opts->lock_time-time(NULL)); } rv = PAM_AUTH_ERR; goto cleanup; } } cleanup: #ifdef HAVE_LIBAUDIT if (audit_fd != -1) { close(audit_fd); } #endif return rv; } /* --- tally bump function: bump tally for uid by (signed) inc --- */ static int tally_bump (int inc, time_t *oldtime, pam_handle_t *pamh, uid_t uid, const char *user, struct tally_options *opts, int *tfile) { struct tallylog tally; tally_t oldcnt; const void *remote_host = NULL; int i, rv; tally.fail_cnt = 0; /* !TALLY_HI --> Log opened for update */ i = get_tally(pamh, uid, opts->filename, tfile, &tally, opts->ctrl); if (i != PAM_SUCCESS) { if (*tfile != -1) { close(*tfile); *tfile = -1; } RETURN_ERROR(i); } /* to remember old fail time (for locktime) */ if (oldtime) { *oldtime = (time_t)tally.fail_time; } tally.fail_time = time(NULL); (void) pam_get_item(pamh, PAM_RHOST, &remote_host); if (!remote_host) { (void) pam_get_item(pamh, PAM_TTY, &remote_host); if (!remote_host) { remote_host = "unknown"; } } strncpy(tally.fail_line, remote_host, sizeof(tally.fail_line)-1); tally.fail_line[sizeof(tally.fail_line)-1] = 0; oldcnt = tally.fail_cnt; if (!(opts->ctrl & OPT_MAGIC_ROOT) || getuid()) { /* magic_root doesn't change tally */ tally.fail_cnt += inc; if (tally.fail_cnt == TALLY_HI) { /* Overflow *and* underflow. :) */ tally.fail_cnt -= inc; pam_syslog(pamh, LOG_ALERT, "Tally %sflowed for user %s", (inc<0)?"under":"over",user); } } rv = tally_check(oldcnt, *oldtime, pamh, uid, user, opts, &tally); i = set_tally(pamh, uid, opts->filename, tfile, &tally); if (i != PAM_SUCCESS) { if (*tfile != -1) { close(*tfile); *tfile = -1; } if (rv == PAM_SUCCESS) RETURN_ERROR( i ); /* fallthrough */ } else if (!(opts->ctrl & OPT_SERIALIZE)) { close(*tfile); *tfile = -1; } return rv; } static int tally_reset (pam_handle_t *pamh, uid_t uid, struct tally_options *opts, int old_tfile) { struct tallylog tally; int tfile = old_tfile; int i; /* resets only if not magic root */ if ((opts->ctrl & OPT_MAGIC_ROOT) && getuid() == 0) { return PAM_SUCCESS; } tally.fail_cnt = 0; /* !TALLY_HI --> Log opened for update */ i=get_tally(pamh, uid, opts->filename, &tfile, &tally, opts->ctrl); if (i != PAM_SUCCESS) { if (tfile != old_tfile) /* the descriptor is not owned by pam data */ close(tfile); RETURN_ERROR(i); } memset(&tally, 0, sizeof(tally)); i=set_tally(pamh, uid, opts->filename, &tfile, &tally); if (i != PAM_SUCCESS) { if (tfile != old_tfile) /* the descriptor is not owned by pam data */ close(tfile); RETURN_ERROR(i); } if (tfile != old_tfile) close(tfile); return PAM_SUCCESS; } /*---------------------------------------------------------------------*/ /* --- authentication management functions (only) --- */ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int rv, tfile = -1; time_t oldtime = 0; struct tally_options options, *opts = &options; uid_t uid; const char *user; rv = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv); if (rv != PAM_SUCCESS) RETURN_ERROR(rv); if (flags & PAM_SILENT) opts->ctrl |= OPT_QUIET; rv = pam_get_uid(pamh, &uid, &user, opts); if (rv != PAM_SUCCESS) RETURN_ERROR(rv); rv = tally_bump(1, &oldtime, pamh, uid, user, opts, &tfile); tally_set_data(pamh, oldtime, tfile); return rv; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int rv, tfile = -1; time_t oldtime = 0; struct tally_options options, *opts = &options; uid_t uid; const char *user; rv = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv); if ( rv != PAM_SUCCESS ) RETURN_ERROR( rv ); rv = pam_get_uid(pamh, &uid, &user, opts); if ( rv != PAM_SUCCESS ) RETURN_ERROR( rv ); if ( tally_get_data(pamh, &oldtime, &tfile) != 0 ) /* no data found */ return PAM_SUCCESS; rv = tally_reset(pamh, uid, opts, tfile); pam_set_data(pamh, MODULE_NAME, NULL, NULL); return rv; } /*---------------------------------------------------------------------*/ /* --- authentication management functions (only) --- */ /* To reset failcount of user on successfull login */ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int rv, tfile = -1; time_t oldtime = 0; struct tally_options options, *opts = &options; uid_t uid; const char *user; rv = tally_parse_args(pamh, opts, PHASE_ACCOUNT, argc, argv); if ( rv != PAM_SUCCESS ) RETURN_ERROR( rv ); rv = pam_get_uid(pamh, &uid, &user, opts); if ( rv != PAM_SUCCESS ) RETURN_ERROR( rv ); if ( tally_get_data(pamh, &oldtime, &tfile) != 0 ) /* no data found */ return PAM_SUCCESS; rv = tally_reset(pamh, uid, opts, tfile); pam_set_data(pamh, MODULE_NAME, NULL, NULL); return rv; } /*-----------------------------------------------------------------------*/ #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_tally2_modstruct = { MODULE_NAME, #ifdef PAM_SM_AUTH pam_sm_authenticate, pam_sm_setcred, #else NULL, NULL, #endif #ifdef PAM_SM_ACCOUNT pam_sm_acct_mgmt, #else NULL, #endif NULL, NULL, NULL, }; #endif /* #ifdef PAM_STATIC */ /*-----------------------------------------------------------------------*/ #else /* #ifndef MAIN */ static const char *cline_filename = DEFAULT_LOGFILE; static tally_t cline_reset = TALLY_HI; /* Default is `interrogate only' */ static int cline_quiet = 0; /* * Not going to link with pamlib just for these.. :) */ static const char * pam_errors( int i ) { switch (i) { case PAM_AUTH_ERR: return _("Authentication error"); case PAM_SERVICE_ERR: return _("Service error"); case PAM_USER_UNKNOWN: return _("Unknown user"); default: return _("Unknown error"); } } static int getopts( char **argv ) { const char *pname = *argv; for ( ; *argv ; (void)(*argv && ++argv) ) { if ( !strcmp (*argv,"--file") ) cline_filename=*++argv; else if ( !strcmp(*argv,"-f") ) cline_filename=*++argv; else if ( !strncmp(*argv,"--file=",7) ) cline_filename=*argv+7; else if ( !strcmp (*argv,"--user") ) cline_user=*++argv; else if ( !strcmp (*argv,"-u") ) cline_user=*++argv; else if ( !strncmp(*argv,"--user=",7) ) cline_user=*argv+7; else if ( !strcmp (*argv,"--reset") ) cline_reset=0; else if ( !strcmp (*argv,"-r") ) cline_reset=0; else if ( !strncmp(*argv,"--reset=",8)) { if ( sscanf(*argv+8,"%hu",&cline_reset) != 1 ) fprintf(stderr,_("%s: Bad number given to --reset=\n"),pname), exit(0); } else if ( !strcmp (*argv,"--quiet") ) cline_quiet=1; else { fprintf(stderr,_("%s: Unrecognised option %s\n"),pname,*argv); return FALSE; } } return TRUE; } static void print_one(const struct tallylog *tally, uid_t uid) { static int once; char *cp; time_t fail_time; struct tm *tm; struct passwd *pwent; const char *username = "[NONAME]"; char ptime[80]; pwent = getpwuid(uid); fail_time = tally->fail_time; tm = localtime(&fail_time); strftime (ptime, sizeof (ptime), "%D %H:%M:%S", tm); cp = ptime; if (pwent) { username = pwent->pw_name; } if (!once) { printf (_("Login Failures Latest failure From\n")); once++; } printf ("%-15.15s %5hu ", username, tally->fail_cnt); if (tally->fail_time) { printf ("%-17.17s %s", cp, tally->fail_line); } putchar ('\n'); } int main( int argc UNUSED, char **argv ) { struct tallylog tally; if ( ! getopts( argv+1 ) ) { printf(_("%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n"), *argv); exit(2); } umask(077); /* * Major difference between individual user and all users: * --user just handles one user, just like PAM. * without --user it handles all users, sniffing cline_filename for nonzeros */ if ( cline_user ) { uid_t uid; int tfile = -1; struct tally_options opts; int i; memset(&opts, 0, sizeof(opts)); opts.ctrl = OPT_AUDIT; i=pam_get_uid(NULL, &uid, NULL, &opts); if ( i != PAM_SUCCESS ) { fprintf(stderr,"%s: %s\n",*argv,pam_errors(i)); exit(1); } i=get_tally(NULL, uid, cline_filename, &tfile, &tally, 0); if ( i != PAM_SUCCESS ) { if (tfile != -1) close(tfile); fprintf(stderr, "%s: %s\n", *argv, pam_errors(i)); exit(1); } if ( !cline_quiet ) print_one(&tally, uid); if (cline_reset != TALLY_HI) { #ifdef HAVE_LIBAUDIT char buf[64]; int audit_fd = audit_open(); snprintf(buf, sizeof(buf), "pam_tally2 uid=%u reset=%hu", uid, cline_reset); audit_log_user_message(audit_fd, AUDIT_USER_ACCT, buf, NULL, NULL, ttyname(STDIN_FILENO), 1); if (audit_fd >=0) close(audit_fd); #endif if (cline_reset == 0) { memset(&tally, 0, sizeof(tally)); } else { tally.fail_cnt = cline_reset; } i=set_tally(NULL, uid, cline_filename, &tfile, &tally); close(tfile); if (i != PAM_SUCCESS) { fprintf(stderr,"%s: %s\n",*argv,pam_errors(i)); exit(1); } } else { close(tfile); } } else /* !cline_user (ie, operate on all users) */ { FILE *tfile=fopen(cline_filename, "r"); uid_t uid=0; if (!tfile && cline_reset != 0) { perror(*argv); exit(1); } for ( ; tfile && !feof(tfile); uid++ ) { if ( !fread(&tally, sizeof(tally), 1, tfile) || !tally.fail_cnt ) { continue; } print_one(&tally, uid); } if (tfile) fclose(tfile); if ( cline_reset!=0 && cline_reset!=TALLY_HI ) { fprintf(stderr,_("%s: Can't reset all users to non-zero\n"),*argv); } else if ( !cline_reset ) { #ifdef HAVE_LIBAUDIT char buf[64]; int audit_fd = audit_open(); snprintf(buf, sizeof(buf), "pam_tally2 uid=all reset=0"); audit_log_user_message(audit_fd, AUDIT_USER_ACCT, buf, NULL, NULL, ttyname(STDIN_FILENO), 1); if (audit_fd >=0) close(audit_fd); #endif tfile=fopen(cline_filename, "w"); if ( !tfile ) perror(*argv), exit(0); fclose(tfile); } } return 0; } #endif /* #ifndef MAIN */ Linux-PAM-1.1.8/modules/pam_tally2/Makefile.am0000644000000000000000000000177212160065211015673 00000000000000# # Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk # Copyright (c) 2008 Red Hat, Inc. # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_tally2 man_MANS = pam_tally2.8 XMLS = README.xml pam_tally2.8.xml TESTS = tst-pam_tally2 securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) noinst_HEADERS = tallylog.h AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include pam_tally2_la_LDFLAGS = -no-undefined -avoid-version -module pam_tally2_la_LIBADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT) if HAVE_VERSIONING pam_tally2_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif pam_tally2_LDADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT) securelib_LTLIBRARIES = pam_tally2.la sbin_PROGRAMS = pam_tally2 pam_tally2_la_SOURCES = pam_tally2.c pam_tally2_SOURCES = pam_tally2_app.c if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_tally2.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_tally2/README0000644000000000000000000001302312216527612014521 00000000000000pam_tally2 — The login counter (tallying) module ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail. pam_tally2 comes in two parts: pam_tally2.so and pam_tally2. The former is the PAM module and the latter, a stand-alone program. pam_tally2 is an (optional) application which can be used to interrogate and manipulate the counter file. It can display users' counts, set individual counts, or clear all counts. Setting artificially high counts may be useful for blocking users without changing their passwords. For example, one might find it useful to clear all counts every midnight from a cron job. Normally, failed attempts to access root will not cause the root account to become blocked, to prevent denial-of-service: if your users aren't given shell accounts and root may only login via su or at the machine console (not telnet/ rsh, etc), this is safe. OPTIONS GLOBAL OPTIONS This can be used for auth and account module types. onerr=[fail|succeed] If something weird happens (like unable to open the file), return with PAM_SUCCESS if onerr=succeed is given, else with the corresponding PAM error code. file=/path/to/counter File where to keep counts. Default is /var/log/tallylog. audit Will log the user name into the system log if the user is not found. silent Don't print informative messages. no_log_info Don't log informative messages via syslog(3). AUTH OPTIONS Authentication phase first increments attempted login counter and checks if user should be denied access. If the user is authenticated and the login process continues on call to pam_setcred(3) it resets the attempts counter. deny=n Deny access if tally for this user exceeds n. lock_time=n Always deny for n seconds after failed attempt. unlock_time=n Allow access after n seconds after failed attempt. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator. magic_root If the module is invoked by a user with uid=0 the counter is not incremented. The sysadmin should use this for user launched services, like su, otherwise this argument should be omitted. even_deny_root Root account can become unavailable. root_unlock_time=n This option implies even_deny_root option. Allow access after n seconds to root account after failed attempt. If this option is used the root user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts. serialize Serialize access to the tally file using locks. This option might be used only for non-multithreaded services because it depends on the fcntl locking of the tally file. Also it is a good idea to use this option only in such configurations where the time between auth phase and account or setcred phase is not dependent on the authenticating client. Otherwise the authenticating client will be able to prevent simultaneous authentications by the same user by simply artificially prolonging the time the file record lock is held. ACCOUNT OPTIONS Account phase resets attempts counter if the user is not magic root. This phase can be used optionally for services which don't call pam_setcred(3) correctly or if the reset should be done regardless of the failure of the account phase of other modules. magic_root If the module is invoked by a user with uid=0 the counter is not changed. The sysadmin should use this for user launched services, like su, otherwise this argument should be omitted. NOTES pam_tally2 is not compatible with the old pam_tally faillog file format. This is caused by requirement of compatibility of the tallylog file format between 32bit and 64bit architectures on multiarch systems. There is no setuid wrapper for access to the data file such as when the pam_tally2.so module is called from xscreensaver. As this would make it impossible to share PAM configuration with such services the following workaround is used: If the data file cannot be opened because of insufficient permissions (EACCES) the module returns PAM_IGNORE. EXAMPLES Add the following line to /etc/pam.d/login to lock the account after 4 failed logins. Root account will be locked as well. The accounts will be automatically unlocked after 20 minutes. The module does not have to be called in the account phase because the login calls pam_setcred(3) correctly. auth required pam_securetty.so auth required pam_tally2.so deny=4 even_deny_root unlock_time=1200 auth required pam_env.so auth required pam_unix.so auth required pam_nologin.so account required pam_unix.so password required pam_unix.so session required pam_limits.so session required pam_unix.so session required pam_lastlog.so nowtmp session optional pam_mail.so standard AUTHOR pam_tally2 was written by Tim Baverstock and Tomas Mraz. Linux-PAM-1.1.8/modules/pam_tally2/pam_tally2_app.c0000644000000000000000000000014312160065211016676 00000000000000/* # This seemed like such a good idea at the time. :) */ #define MAIN #include "pam_tally2.c" Linux-PAM-1.1.8/modules/pam_tally2/pam_tally2.80000644000000000000000000001754112216527612016007 00000000000000'\" t .\" Title: pam_tally2 .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_TALLY2" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_tally2 \- The login counter (tallying) module .SH "SYNOPSIS" .HP \w'\fBpam_tally2\&.so\fR\ 'u \fBpam_tally2\&.so\fR [file=\fI/path/to/counter\fR] [onerr=[\fIfail\fR|\fIsucceed\fR]] [magic_root] [even_deny_root] [deny=\fIn\fR] [lock_time=\fIn\fR] [unlock_time=\fIn\fR] [root_unlock_time=\fIn\fR] [serialize] [audit] [silent] [no_log_info] .HP \w'\fBpam_tally2\fR\ 'u \fBpam_tally2\fR [\-\-file\ \fI/path/to/counter\fR] [\-\-user\ \fIusername\fR] [\-\-reset[=\fIn\fR]] [\-\-quiet] .SH "DESCRIPTION" .PP This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail\&. .PP pam_tally2 comes in two parts: \fBpam_tally2\&.so\fR and \fBpam_tally2\fR\&. The former is the PAM module and the latter, a stand\-alone program\&. \fBpam_tally2\fR is an (optional) application which can be used to interrogate and manipulate the counter file\&. It can display users\*(Aq counts, set individual counts, or clear all counts\&. Setting artificially high counts may be useful for blocking users without changing their passwords\&. For example, one might find it useful to clear all counts every midnight from a cron job\&. .PP Normally, failed attempts to access \fIroot\fR will \fBnot\fR cause the root account to become blocked, to prevent denial\-of\-service: if your users aren\*(Aqt given shell accounts and root may only login via \fBsu\fR or at the machine console (not telnet/rsh, etc), this is safe\&. .SH "OPTIONS" .PP GLOBAL OPTIONS .RS 4 This can be used for \fIauth\fR and \fIaccount\fR module types\&. .PP \fBonerr=[\fR\fB\fIfail\fR\fR\fB|\fR\fB\fIsucceed\fR\fR\fB]\fR .RS 4 If something weird happens (like unable to open the file), return with \fBPAM_SUCCESS\fR if \fBonerr=\fR\fB\fIsucceed\fR\fR is given, else with the corresponding PAM error code\&. .RE .PP \fBfile=\fR\fB\fI/path/to/counter\fR\fR .RS 4 File where to keep counts\&. Default is /var/log/tallylog\&. .RE .PP \fBaudit\fR .RS 4 Will log the user name into the system log if the user is not found\&. .RE .PP \fBsilent\fR .RS 4 Don\*(Aqt print informative messages\&. .RE .PP \fBno_log_info\fR .RS 4 Don\*(Aqt log informative messages via \fBsyslog\fR(3)\&. .RE .RE .PP AUTH OPTIONS .RS 4 Authentication phase first increments attempted login counter and checks if user should be denied access\&. If the user is authenticated and the login process continues on call to \fBpam_setcred\fR(3) it resets the attempts counter\&. .PP \fBdeny=\fR\fB\fIn\fR\fR .RS 4 Deny access if tally for this user exceeds \fIn\fR\&. .RE .PP \fBlock_time=\fR\fB\fIn\fR\fR .RS 4 Always deny for \fIn\fR seconds after failed attempt\&. .RE .PP \fBunlock_time=\fR\fB\fIn\fR\fR .RS 4 Allow access after \fIn\fR seconds after failed attempt\&. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts\&. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator\&. .RE .PP \fBmagic_root\fR .RS 4 If the module is invoked by a user with uid=0 the counter is not incremented\&. The sysadmin should use this for user launched services, like \fBsu\fR, otherwise this argument should be omitted\&. .RE .PP \fBeven_deny_root\fR .RS 4 Root account can become unavailable\&. .RE .PP \fBroot_unlock_time=\fR\fB\fIn\fR\fR .RS 4 This option implies \fBeven_deny_root\fR option\&. Allow access after \fIn\fR seconds to root account after failed attempt\&. If this option is used the root user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts\&. .RE .PP \fBserialize\fR .RS 4 Serialize access to the tally file using locks\&. This option might be used only for non\-multithreaded services because it depends on the fcntl locking of the tally file\&. Also it is a good idea to use this option only in such configurations where the time between auth phase and account or setcred phase is not dependent on the authenticating client\&. Otherwise the authenticating client will be able to prevent simultaneous authentications by the same user by simply artificially prolonging the time the file record lock is held\&. .RE .RE .PP ACCOUNT OPTIONS .RS 4 Account phase resets attempts counter if the user is \fBnot\fR magic root\&. This phase can be used optionally for services which don\*(Aqt call \fBpam_setcred\fR(3) correctly or if the reset should be done regardless of the failure of the account phase of other modules\&. .PP \fBmagic_root\fR .RS 4 If the module is invoked by a user with uid=0 the counter is not changed\&. The sysadmin should use this for user launched services, like \fBsu\fR, otherwise this argument should be omitted\&. .RE .RE .SH "MODULE TYPES PROVIDED" .PP The \fBauth\fR and \fBaccount\fR module types are provided\&. .SH "RETURN VALUES" .PP PAM_AUTH_ERR .RS 4 A invalid option was given, the module was not able to retrieve the user name, no valid counter file was found, or too many failed logins\&. .RE .PP PAM_SUCCESS .RS 4 Everything was successful\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known\&. .RE .SH "NOTES" .PP pam_tally2 is not compatible with the old pam_tally faillog file format\&. This is caused by requirement of compatibility of the tallylog file format between 32bit and 64bit architectures on multiarch systems\&. .PP There is no setuid wrapper for access to the data file such as when the \fBpam_tally2\&.so\fR module is called from xscreensaver\&. As this would make it impossible to share PAM configuration with such services the following workaround is used: If the data file cannot be opened because of insufficient permissions (\fBEACCES\fR) the module returns \fBPAM_IGNORE\fR\&. .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/login to lock the account after 4 failed logins\&. Root account will be locked as well\&. The accounts will be automatically unlocked after 20 minutes\&. The module does not have to be called in the account phase because the \fBlogin\fR calls \fBpam_setcred\fR(3) correctly\&. .sp .if n \{\ .RS 4 .\} .nf auth required pam_securetty\&.so auth required pam_tally2\&.so deny=4 even_deny_root unlock_time=1200 auth required pam_env\&.so auth required pam_unix\&.so auth required pam_nologin\&.so account required pam_unix\&.so password required pam_unix\&.so session required pam_limits\&.so session required pam_unix\&.so session required pam_lastlog\&.so nowtmp session optional pam_mail\&.so standard .fi .if n \{\ .RE .\} .SH "FILES" .PP /var/log/tallylog .RS 4 failure count logging file .RE .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_tally2 was written by Tim Baverstock and Tomas Mraz\&. Linux-PAM-1.1.8/modules/pam_tally2/Makefile.in0000644000000000000000000006625212216527537015730 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk # Copyright (c) 2008 Red Hat, Inc. # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map sbin_PROGRAMS = pam_tally2$(EXEEXT) subdir = modules/pam_tally2 DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(sbindir)" \ "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) am__DEPENDENCIES_1 = pam_tally2_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(am__DEPENDENCIES_1) am_pam_tally2_la_OBJECTS = pam_tally2.lo pam_tally2_la_OBJECTS = $(am_pam_tally2_la_OBJECTS) pam_tally2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(pam_tally2_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(sbin_PROGRAMS) am_pam_tally2_OBJECTS = pam_tally2_app.$(OBJEXT) pam_tally2_OBJECTS = $(am_pam_tally2_OBJECTS) pam_tally2_DEPENDENCIES = $(top_builddir)/libpam/libpam.la \ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_tally2_la_SOURCES) $(pam_tally2_SOURCES) DIST_SOURCES = $(pam_tally2_la_SOURCES) $(pam_tally2_SOURCES) man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_tally2 man_MANS = pam_tally2.8 XMLS = README.xml pam_tally2.8.xml TESTS = tst-pam_tally2 securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) noinst_HEADERS = tallylog.h AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include pam_tally2_la_LDFLAGS = -no-undefined -avoid-version -module \ $(am__append_1) pam_tally2_la_LIBADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT) pam_tally2_LDADD = $(top_builddir)/libpam/libpam.la $(LIBAUDIT) securelib_LTLIBRARIES = pam_tally2.la pam_tally2_la_SOURCES = pam_tally2.c pam_tally2_SOURCES = pam_tally2_app.c @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_tally2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_tally2/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_tally2.la: $(pam_tally2_la_OBJECTS) $(pam_tally2_la_DEPENDENCIES) $(pam_tally2_la_LINK) -rpath $(securelibdir) $(pam_tally2_la_OBJECTS) $(pam_tally2_la_LIBADD) $(LIBS) install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(sbindir)" && rm -f $$files clean-sbinPROGRAMS: @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pam_tally2$(EXEEXT): $(pam_tally2_OBJECTS) $(pam_tally2_DEPENDENCIES) @rm -f pam_tally2$(EXEEXT) $(LINK) $(pam_tally2_OBJECTS) $(pam_tally2_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_tally2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_tally2_app.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(sbindir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \ clean-securelibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-sbinPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-sbinPROGRAMS \ uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-sbinPROGRAMS \ clean-securelibLTLIBRARIES 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-man8 \ install-pdf install-pdf-am install-ps install-ps-am \ install-sbinPROGRAMS install-securelibLTLIBRARIES \ 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-man \ uninstall-man8 uninstall-sbinPROGRAMS \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_tally2.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_tally2/pam_tally2.8.xml0000644000000000000000000003537412160065211016600 00000000000000 pam_tally2 8 Linux-PAM Manual pam_tally2 The login counter (tallying) module pam_tally2.so file=/path/to/counter onerr=[fail|succeed] magic_root even_deny_root deny=n lock_time=n unlock_time=n root_unlock_time=n serialize audit silent no_log_info pam_tally2 --file /path/to/counter --user username --reset[=n] --quiet DESCRIPTION This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail. pam_tally2 comes in two parts: pam_tally2.so and pam_tally2. The former is the PAM module and the latter, a stand-alone program. pam_tally2 is an (optional) application which can be used to interrogate and manipulate the counter file. It can display users' counts, set individual counts, or clear all counts. Setting artificially high counts may be useful for blocking users without changing their passwords. For example, one might find it useful to clear all counts every midnight from a cron job. Normally, failed attempts to access root will not cause the root account to become blocked, to prevent denial-of-service: if your users aren't given shell accounts and root may only login via su or at the machine console (not telnet/rsh, etc), this is safe. OPTIONS GLOBAL OPTIONS This can be used for auth and account module types. If something weird happens (like unable to open the file), return with PAM_SUCCESS if is given, else with the corresponding PAM error code. File where to keep counts. Default is /var/log/tallylog. Will log the user name into the system log if the user is not found. Don't print informative messages. Don't log informative messages via syslog3. AUTH OPTIONS Authentication phase first increments attempted login counter and checks if user should be denied access. If the user is authenticated and the login process continues on call to pam_setcred3 it resets the attempts counter. Deny access if tally for this user exceeds n. Always deny for n seconds after failed attempt. Allow access after n seconds after failed attempt. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator. If the module is invoked by a user with uid=0 the counter is not incremented. The sysadmin should use this for user launched services, like su, otherwise this argument should be omitted. Root account can become unavailable. This option implies option. Allow access after n seconds to root account after failed attempt. If this option is used the root user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts. Serialize access to the tally file using locks. This option might be used only for non-multithreaded services because it depends on the fcntl locking of the tally file. Also it is a good idea to use this option only in such configurations where the time between auth phase and account or setcred phase is not dependent on the authenticating client. Otherwise the authenticating client will be able to prevent simultaneous authentications by the same user by simply artificially prolonging the time the file record lock is held. ACCOUNT OPTIONS Account phase resets attempts counter if the user is not magic root. This phase can be used optionally for services which don't call pam_setcred3 correctly or if the reset should be done regardless of the failure of the account phase of other modules. If the module is invoked by a user with uid=0 the counter is not changed. The sysadmin should use this for user launched services, like su, otherwise this argument should be omitted. MODULE TYPES PROVIDED The and module types are provided. RETURN VALUES PAM_AUTH_ERR A invalid option was given, the module was not able to retrieve the user name, no valid counter file was found, or too many failed logins. PAM_SUCCESS Everything was successful. PAM_USER_UNKNOWN User not known. NOTES pam_tally2 is not compatible with the old pam_tally faillog file format. This is caused by requirement of compatibility of the tallylog file format between 32bit and 64bit architectures on multiarch systems. There is no setuid wrapper for access to the data file such as when the pam_tally2.so module is called from xscreensaver. As this would make it impossible to share PAM configuration with such services the following workaround is used: If the data file cannot be opened because of insufficient permissions (EACCES) the module returns PAM_IGNORE. EXAMPLES Add the following line to /etc/pam.d/login to lock the account after 4 failed logins. Root account will be locked as well. The accounts will be automatically unlocked after 20 minutes. The module does not have to be called in the account phase because the login calls pam_setcred3 correctly. auth required pam_securetty.so auth required pam_tally2.so deny=4 even_deny_root unlock_time=1200 auth required pam_env.so auth required pam_unix.so auth required pam_nologin.so account required pam_unix.so password required pam_unix.so session required pam_limits.so session required pam_unix.so session required pam_lastlog.so nowtmp session optional pam_mail.so standard FILES /var/log/tallylog failure count logging file SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_tally2 was written by Tim Baverstock and Tomas Mraz. Linux-PAM-1.1.8/modules/pam_tally2/README.xml0000644000000000000000000000247612160065211015320 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_tally2.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_tally2-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_tally2/tst-pam_tally20000755000000000000000000000006512160065211016433 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_tally2.so Linux-PAM-1.1.8/modules/pam_cracklib/0000755000000000000000000000000012216542310014255 500000000000000Linux-PAM-1.1.8/modules/pam_cracklib/pam_cracklib.80000644000000000000000000003021012160066750016700 00000000000000'\" t .\" Title: pam_cracklib .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 06/18/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_CRACKLIB" "8" "06/18/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_cracklib \- PAM module to check the password against dictionary words .SH "SYNOPSIS" .HP \w'\fBpam_cracklib\&.so\fR\ 'u \fBpam_cracklib\&.so\fR [\fI\&.\&.\&.\fR] .SH "DESCRIPTION" .PP This module can be plugged into the \fIpassword\fR stack of a given application to provide some plug\-in strength\-checking for passwords\&. .PP The action of this module is to prompt the user for a password and check its strength against a system dictionary and a set of rules for identifying poor choices\&. .PP The first action is to prompt for a single password, check its strength and then, if it is considered strong, prompt for the password a second time (to verify that it was typed correctly on the first occasion)\&. All being well, the password is passed on to subsequent modules to be installed as the new authentication token\&. .PP The strength checks works in the following manner: at first the \fBCracklib\fR routine is called to check if the password is part of a dictionary; if this is not the case an additional set of strength checks is done\&. These checks are: .PP Palindrome .RS 4 Is the new password a palindrome? .RE .PP Case Change Only .RS 4 Is the new password the the old one with only a change of case? .RE .PP Similar .RS 4 Is the new password too much like the old one? This is primarily controlled by one argument, \fBdifok\fR which is a number of character changes (inserts, removals, or replacements) between the old and new password that are enough to accept the new password\&. This defaults to 5 changes\&. .RE .PP Simple .RS 4 Is the new password too small? This is controlled by 6 arguments \fBminlen\fR, \fBmaxclassrepeat\fR, \fBdcredit\fR, \fBucredit\fR, \fBlcredit\fR, and \fBocredit\fR\&. See the section on the arguments for the details of how these work and there defaults\&. .RE .PP Rotated .RS 4 Is the new password a rotated version of the old password? .RE .PP Same consecutive characters .RS 4 Optional check for same consecutive characters\&. .RE .PP Too long monotonic character sequence .RS 4 Optional check for too long monotonic character sequence\&. .RE .PP Contains user name .RS 4 Optional check whether the password contains the user\*(Aqs name in some form\&. .RE .PP This module with no arguments will work well for standard unix password encryption\&. With md5 encryption, passwords can be longer than 8 characters and the default settings for this module can make it hard for the user to choose a satisfactory new password\&. Notably, the requirement that the new password contain no more than 1/2 of the characters in the old password becomes a non\-trivial constraint\&. For example, an old password of the form "the quick brown fox jumped over the lazy dogs" would be difficult to change\&.\&.\&. In addition, the default action is to allow passwords as small as 5 characters in length\&. For a md5 systems it can be a good idea to increase the required minimum size of a password\&. One can then allow more credit for different kinds of characters but accept that the new password may share most of these characters with the old password\&. .SH "OPTIONS" .PP .PP \fBdebug\fR .RS 4 This option makes the module write information to \fBsyslog\fR(3) indicating the behavior of the module (this option does not write password information to the log file)\&. .RE .PP \fBauthtok_type=\fR\fB\fIXXX\fR\fR .RS 4 The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: "\&. The example word \fIUNIX\fR can be replaced with this option, by default it is empty\&. .RE .PP \fBretry=\fR\fB\fIN\fR\fR .RS 4 Prompt user at most \fIN\fR times before returning with error\&. The default is \fI1\fR\&. .RE .PP \fBdifok=\fR\fB\fIN\fR\fR .RS 4 This argument will change the default of \fI5\fR for the number of character changes in the new password that differentiate it from the old password\&. .RE .PP \fBminlen=\fR\fB\fIN\fR\fR .RS 4 The minimum acceptable size for the new password (plus one if credits are not disabled which is the default)\&. In addition to the number of characters in the new password, credit (of +1 in length) is given for each different kind of character (\fIother\fR, \fIupper\fR, \fIlower\fR and \fIdigit\fR)\&. The default for this parameter is \fI9\fR which is good for a old style UNIX password all of the same type of character but may be too low to exploit the added security of a md5 system\&. Note that there is a pair of length limits in \fICracklib\fR itself, a "way too short" limit of 4 which is hard coded in and a defined limit (6) that will be checked without reference to \fBminlen\fR\&. If you want to allow passwords as short as 5 characters you should not use this module\&. .RE .PP \fBdcredit=\fR\fB\fIN\fR\fR .RS 4 (N >= 0) This is the maximum credit for having digits in the new password\&. If you have less than or \fIN\fR digits, each digit will count +1 towards meeting the current \fBminlen\fR value\&. The default for \fBdcredit\fR is 1 which is the recommended value for \fBminlen\fR less than 10\&. .sp (N < 0) This is the minimum number of digits that must be met for a new password\&. .RE .PP \fBucredit=\fR\fB\fIN\fR\fR .RS 4 (N >= 0) This is the maximum credit for having upper case letters in the new password\&. If you have less than or \fIN\fR upper case letters each letter will count +1 towards meeting the current \fBminlen\fR value\&. The default for \fBucredit\fR is \fI1\fR which is the recommended value for \fBminlen\fR less than 10\&. .sp (N < 0) This is the minimum number of upper case letters that must be met for a new password\&. .RE .PP \fBlcredit=\fR\fB\fIN\fR\fR .RS 4 (N >= 0) This is the maximum credit for having lower case letters in the new password\&. If you have less than or \fIN\fR lower case letters, each letter will count +1 towards meeting the current \fBminlen\fR value\&. The default for \fBlcredit\fR is 1 which is the recommended value for \fBminlen\fR less than 10\&. .sp (N < 0) This is the minimum number of lower case letters that must be met for a new password\&. .RE .PP \fBocredit=\fR\fB\fIN\fR\fR .RS 4 (N >= 0) This is the maximum credit for having other characters in the new password\&. If you have less than or \fIN\fR other characters, each character will count +1 towards meeting the current \fBminlen\fR value\&. The default for \fBocredit\fR is 1 which is the recommended value for \fBminlen\fR less than 10\&. .sp (N < 0) This is the minimum number of other characters that must be met for a new password\&. .RE .PP \fBminclass=\fR\fB\fIN\fR\fR .RS 4 The minimum number of required classes of characters for the new password\&. The default number is zero\&. The four classes are digits, upper and lower letters and other characters\&. The difference to the \fBcredit\fR check is that a specific class if of characters is not required\&. Instead \fIN\fR out of four of the classes are required\&. .RE .PP \fBmaxrepeat=\fR\fB\fIN\fR\fR .RS 4 Reject passwords which contain more than N same consecutive characters\&. The default is 0 which means that this check is disabled\&. .RE .PP \fBmaxsequence=\fR\fB\fIN\fR\fR .RS 4 Reject passwords which contain monotonic character sequences longer than N\&. The default is 0 which means that this check is disabled\&. Examples of such sequence are \*(Aq12345\*(Aq or \*(Aqfedcb\*(Aq\&. Note that most such passwords will not pass the simplicity check unless the sequence is only a minor part of the password\&. .RE .PP \fBmaxclassrepeat=\fR\fB\fIN\fR\fR .RS 4 Reject passwords which contain more than N consecutive characters of the same class\&. The default is 0 which means that this check is disabled\&. .RE .PP \fBreject_username\fR .RS 4 Check whether the name of the user in straight or reversed form is contained in the new password\&. If it is found the new password is rejected\&. .RE .PP \fBgecoscheck\fR .RS 4 Check whether the words from the GECOS field (usualy full name of the user) longer than 3 characters in straight or reversed form are contained in the new password\&. If any such word is found the new password is rejected\&. .RE .PP \fBenforce_for_root\fR .RS 4 The module will return error on failed check also if the user changing the password is root\&. This option is off by default which means that just the message about the failed check is printed but root can change the password anyway\&. Note that root is not asked for an old password so the checks that compare the old and new password are not performed\&. .RE .PP \fBuse_authtok\fR .RS 4 This argument is used to \fIforce\fR the module to not prompt the user for a new password but use the one provided by the previously stacked \fIpassword\fR module\&. .RE .PP \fBdictpath=\fR\fB\fI/path/to/dict\fR\fR .RS 4 Path to the cracklib dictionaries\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBpassword\fR module type is provided\&. .SH "RETURN VALUES" .PP .PP PAM_SUCCESS .RS 4 The new password passes all checks\&. .RE .PP PAM_AUTHTOK_ERR .RS 4 No new password was entered, the username could not be determined or the new password fails the strength checks\&. .RE .PP PAM_AUTHTOK_RECOVERY_ERR .RS 4 The old password was not supplied by a previous stacked module or got not requested from the user\&. The first error can happen if \fBuse_authtok\fR is specified\&. .RE .PP PAM_SERVICE_ERR .RS 4 A internal error occurred\&. .RE .SH "EXAMPLES" .PP For an example of the use of this module, we show how it may be stacked with the password component of \fBpam_unix\fR(8) .sp .if n \{\ .RS 4 .\} .nf # # These lines stack two password type modules\&. In this example the # user is given 3 opportunities to enter a strong password\&. The # "use_authtok" argument ensures that the pam_unix module does not # prompt for a password, but instead uses the one provided by # pam_cracklib\&. # passwd password required pam_cracklib\&.so retry=3 passwd password required pam_unix\&.so use_authtok .fi .if n \{\ .RE .\} .PP Another example (in the /etc/pam\&.d/passwd format) is for the case that you want to use md5 password encryption: .sp .if n \{\ .RS 4 .\} .nf #%PAM\-1\&.0 # # These lines allow a md5 systems to support passwords of at least 14 # bytes with extra credit of 2 for digits and 2 for others the new # password must have at least three bytes that are not present in the # old password # password required pam_cracklib\&.so \e difok=3 minlen=15 dcredit= 2 ocredit=2 password required pam_unix\&.so use_authtok nullok md5 .fi .if n \{\ .RE .\} .PP And here is another example in case you don\*(Aqt want to use credits: .sp .if n \{\ .RS 4 .\} .nf #%PAM\-1\&.0 # # These lines require the user to select a password with a minimum # length of 8 and with at least 1 digit number, 1 upper case letter, # and 1 other character # password required pam_cracklib\&.so \e dcredit=\-1 ucredit=\-1 ocredit=\-1 lcredit=0 minlen=8 password required pam_unix\&.so use_authtok nullok md5 .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_cracklib was written by Cristian Gafton Linux-PAM-1.1.8/modules/pam_cracklib/tst-pam_cracklib0000755000000000000000000000006712160065211017343 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_cracklib.so Linux-PAM-1.1.8/modules/pam_cracklib/Makefile.am0000644000000000000000000000152612160065211016233 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(XMLS) pam_cracklib.8 tst-pam_cracklib if HAVE_LIBCRACK TESTS = tst-pam_cracklib man_MANS = pam_cracklib.8 endif XMLS = README.xml pam_cracklib.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif pam_cracklib_la_LIBADD = $(top_builddir)/libpam/libpam.la \ @LIBCRACK@ @LIBCRYPT@ if HAVE_LIBCRACK securelib_LTLIBRARIES = pam_cracklib.la endif if ENABLE_REGENERATE_MAN noinst_DATA = README pam_cracklib.8 README: pam_cracklib.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_cracklib/README0000644000000000000000000002303512216527571015074 00000000000000pam_cracklib — PAM module to check the password against dictionary words ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION This module can be plugged into the password stack of a given application to provide some plug-in strength-checking for passwords. The action of this module is to prompt the user for a password and check its strength against a system dictionary and a set of rules for identifying poor choices. The first action is to prompt for a single password, check its strength and then, if it is considered strong, prompt for the password a second time (to verify that it was typed correctly on the first occasion). All being well, the password is passed on to subsequent modules to be installed as the new authentication token. The strength checks works in the following manner: at first the Cracklib routine is called to check if the password is part of a dictionary; if this is not the case an additional set of strength checks is done. These checks are: Palindrome Is the new password a palindrome? Case Change Only Is the new password the the old one with only a change of case? Similar Is the new password too much like the old one? This is primarily controlled by one argument, difok which is a number of character changes (inserts, removals, or replacements) between the old and new password that are enough to accept the new password. This defaults to 5 changes. Simple Is the new password too small? This is controlled by 6 arguments minlen, maxclassrepeat, dcredit, ucredit, lcredit, and ocredit. See the section on the arguments for the details of how these work and there defaults. Rotated Is the new password a rotated version of the old password? Same consecutive characters Optional check for same consecutive characters. Too long monotonic character sequence Optional check for too long monotonic character sequence. Contains user name Optional check whether the password contains the user's name in some form. This module with no arguments will work well for standard unix password encryption. With md5 encryption, passwords can be longer than 8 characters and the default settings for this module can make it hard for the user to choose a satisfactory new password. Notably, the requirement that the new password contain no more than 1/2 of the characters in the old password becomes a non-trivial constraint. For example, an old password of the form "the quick brown fox jumped over the lazy dogs" would be difficult to change... In addition, the default action is to allow passwords as small as 5 characters in length. For a md5 systems it can be a good idea to increase the required minimum size of a password. One can then allow more credit for different kinds of characters but accept that the new password may share most of these characters with the old password. OPTIONS debug This option makes the module write information to syslog(3) indicating the behavior of the module (this option does not write password information to the log file). authtok_type=XXX The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: ". The example word UNIX can be replaced with this option, by default it is empty. retry=N Prompt user at most N times before returning with error. The default is 1. difok=N This argument will change the default of 5 for the number of character changes in the new password that differentiate it from the old password. minlen=N The minimum acceptable size for the new password (plus one if credits are not disabled which is the default). In addition to the number of characters in the new password, credit (of +1 in length) is given for each different kind of character (other, upper, lower and digit). The default for this parameter is 9 which is good for a old style UNIX password all of the same type of character but may be too low to exploit the added security of a md5 system. Note that there is a pair of length limits in Cracklib itself, a "way too short" limit of 4 which is hard coded in and a defined limit (6) that will be checked without reference to minlen. If you want to allow passwords as short as 5 characters you should not use this module. dcredit=N (N >= 0) This is the maximum credit for having digits in the new password. If you have less than or N digits, each digit will count +1 towards meeting the current minlen value. The default for dcredit is 1 which is the recommended value for minlen less than 10. (N < 0) This is the minimum number of digits that must be met for a new password. ucredit=N (N >= 0) This is the maximum credit for having upper case letters in the new password. If you have less than or N upper case letters each letter will count +1 towards meeting the current minlen value. The default for ucredit is 1 which is the recommended value for minlen less than 10. (N < 0) This is the minimum number of upper case letters that must be met for a new password. lcredit=N (N >= 0) This is the maximum credit for having lower case letters in the new password. If you have less than or N lower case letters, each letter will count +1 towards meeting the current minlen value. The default for lcredit is 1 which is the recommended value for minlen less than 10. (N < 0) This is the minimum number of lower case letters that must be met for a new password. ocredit=N (N >= 0) This is the maximum credit for having other characters in the new password. If you have less than or N other characters, each character will count +1 towards meeting the current minlen value. The default for ocredit is 1 which is the recommended value for minlen less than 10. (N < 0) This is the minimum number of other characters that must be met for a new password. minclass=N The minimum number of required classes of characters for the new password. The default number is zero. The four classes are digits, upper and lower letters and other characters. The difference to the credit check is that a specific class if of characters is not required. Instead N out of four of the classes are required. maxrepeat=N Reject passwords which contain more than N same consecutive characters. The default is 0 which means that this check is disabled. maxsequence=N Reject passwords which contain monotonic character sequences longer than N. The default is 0 which means that this check is disabled. Examples of such sequence are '12345' or 'fedcb'. Note that most such passwords will not pass the simplicity check unless the sequence is only a minor part of the password. maxclassrepeat=N Reject passwords which contain more than N consecutive characters of the same class. The default is 0 which means that this check is disabled. reject_username Check whether the name of the user in straight or reversed form is contained in the new password. If it is found the new password is rejected. gecoscheck Check whether the words from the GECOS field (usualy full name of the user) longer than 3 characters in straight or reversed form are contained in the new password. If any such word is found the new password is rejected. enforce_for_root The module will return error on failed check also if the user changing the password is root. This option is off by default which means that just the message about the failed check is printed but root can change the password anyway. Note that root is not asked for an old password so the checks that compare the old and new password are not performed. use_authtok This argument is used to force the module to not prompt the user for a new password but use the one provided by the previously stacked password module. dictpath=/path/to/dict Path to the cracklib dictionaries. EXAMPLES For an example of the use of this module, we show how it may be stacked with the password component of pam_unix(8) # # These lines stack two password type modules. In this example the # user is given 3 opportunities to enter a strong password. The # "use_authtok" argument ensures that the pam_unix module does not # prompt for a password, but instead uses the one provided by # pam_cracklib. # passwd password required pam_cracklib.so retry=3 passwd password required pam_unix.so use_authtok Another example (in the /etc/pam.d/passwd format) is for the case that you want to use md5 password encryption: #%PAM-1.0 # # These lines allow a md5 systems to support passwords of at least 14 # bytes with extra credit of 2 for digits and 2 for others the new # password must have at least three bytes that are not present in the # old password # password required pam_cracklib.so \ difok=3 minlen=15 dcredit= 2 ocredit=2 password required pam_unix.so use_authtok nullok md5 And here is another example in case you don't want to use credits: #%PAM-1.0 # # These lines require the user to select a password with a minimum # length of 8 and with at least 1 digit number, 1 upper case letter, # and 1 other character # password required pam_cracklib.so \ dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8 password required pam_unix.so use_authtok nullok md5 AUTHOR pam_cracklib was written by Cristian Gafton Linux-PAM-1.1.8/modules/pam_cracklib/pam_cracklib.8.xml0000644000000000000000000005016512160065211017501 00000000000000 pam_cracklib 8 Linux-PAM Manual pam_cracklib PAM module to check the password against dictionary words pam_cracklib.so ... DESCRIPTION This module can be plugged into the password stack of a given application to provide some plug-in strength-checking for passwords. The action of this module is to prompt the user for a password and check its strength against a system dictionary and a set of rules for identifying poor choices. The first action is to prompt for a single password, check its strength and then, if it is considered strong, prompt for the password a second time (to verify that it was typed correctly on the first occasion). All being well, the password is passed on to subsequent modules to be installed as the new authentication token. The strength checks works in the following manner: at first the Cracklib routine is called to check if the password is part of a dictionary; if this is not the case an additional set of strength checks is done. These checks are: Palindrome Is the new password a palindrome? Case Change Only Is the new password the the old one with only a change of case? Similar Is the new password too much like the old one? This is primarily controlled by one argument, which is a number of character changes (inserts, removals, or replacements) between the old and new password that are enough to accept the new password. This defaults to 5 changes. Simple Is the new password too small? This is controlled by 6 arguments , , , , , and . See the section on the arguments for the details of how these work and there defaults. Rotated Is the new password a rotated version of the old password? Same consecutive characters Optional check for same consecutive characters. Too long monotonic character sequence Optional check for too long monotonic character sequence. Contains user name Optional check whether the password contains the user's name in some form. This module with no arguments will work well for standard unix password encryption. With md5 encryption, passwords can be longer than 8 characters and the default settings for this module can make it hard for the user to choose a satisfactory new password. Notably, the requirement that the new password contain no more than 1/2 of the characters in the old password becomes a non-trivial constraint. For example, an old password of the form "the quick brown fox jumped over the lazy dogs" would be difficult to change... In addition, the default action is to allow passwords as small as 5 characters in length. For a md5 systems it can be a good idea to increase the required minimum size of a password. One can then allow more credit for different kinds of characters but accept that the new password may share most of these characters with the old password. OPTIONS This option makes the module write information to syslog3 indicating the behavior of the module (this option does not write password information to the log file). The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: ". The example word UNIX can be replaced with this option, by default it is empty. Prompt user at most N times before returning with error. The default is 1. This argument will change the default of 5 for the number of character changes in the new password that differentiate it from the old password. The minimum acceptable size for the new password (plus one if credits are not disabled which is the default). In addition to the number of characters in the new password, credit (of +1 in length) is given for each different kind of character (other, upper, lower and digit). The default for this parameter is 9 which is good for a old style UNIX password all of the same type of character but may be too low to exploit the added security of a md5 system. Note that there is a pair of length limits in Cracklib itself, a "way too short" limit of 4 which is hard coded in and a defined limit (6) that will be checked without reference to . If you want to allow passwords as short as 5 characters you should not use this module. (N >= 0) This is the maximum credit for having digits in the new password. If you have less than or N digits, each digit will count +1 towards meeting the current value. The default for is 1 which is the recommended value for less than 10. (N < 0) This is the minimum number of digits that must be met for a new password. (N >= 0) This is the maximum credit for having upper case letters in the new password. If you have less than or N upper case letters each letter will count +1 towards meeting the current value. The default for is 1 which is the recommended value for less than 10. (N < 0) This is the minimum number of upper case letters that must be met for a new password. (N >= 0) This is the maximum credit for having lower case letters in the new password. If you have less than or N lower case letters, each letter will count +1 towards meeting the current value. The default for is 1 which is the recommended value for less than 10. (N < 0) This is the minimum number of lower case letters that must be met for a new password. (N >= 0) This is the maximum credit for having other characters in the new password. If you have less than or N other characters, each character will count +1 towards meeting the current value. The default for is 1 which is the recommended value for less than 10. (N < 0) This is the minimum number of other characters that must be met for a new password. The minimum number of required classes of characters for the new password. The default number is zero. The four classes are digits, upper and lower letters and other characters. The difference to the check is that a specific class if of characters is not required. Instead N out of four of the classes are required. Reject passwords which contain more than N same consecutive characters. The default is 0 which means that this check is disabled. Reject passwords which contain monotonic character sequences longer than N. The default is 0 which means that this check is disabled. Examples of such sequence are '12345' or 'fedcb'. Note that most such passwords will not pass the simplicity check unless the sequence is only a minor part of the password. Reject passwords which contain more than N consecutive characters of the same class. The default is 0 which means that this check is disabled. Check whether the name of the user in straight or reversed form is contained in the new password. If it is found the new password is rejected. Check whether the words from the GECOS field (usualy full name of the user) longer than 3 characters in straight or reversed form are contained in the new password. If any such word is found the new password is rejected. The module will return error on failed check also if the user changing the password is root. This option is off by default which means that just the message about the failed check is printed but root can change the password anyway. Note that root is not asked for an old password so the checks that compare the old and new password are not performed. This argument is used to force the module to not prompt the user for a new password but use the one provided by the previously stacked password module. Path to the cracklib dictionaries. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_SUCCESS The new password passes all checks. PAM_AUTHTOK_ERR No new password was entered, the username could not be determined or the new password fails the strength checks. PAM_AUTHTOK_RECOVERY_ERR The old password was not supplied by a previous stacked module or got not requested from the user. The first error can happen if is specified. PAM_SERVICE_ERR A internal error occurred. EXAMPLES For an example of the use of this module, we show how it may be stacked with the password component of pam_unix8 # # These lines stack two password type modules. In this example the # user is given 3 opportunities to enter a strong password. The # "use_authtok" argument ensures that the pam_unix module does not # prompt for a password, but instead uses the one provided by # pam_cracklib. # passwd password required pam_cracklib.so retry=3 passwd password required pam_unix.so use_authtok Another example (in the /etc/pam.d/passwd format) is for the case that you want to use md5 password encryption: #%PAM-1.0 # # These lines allow a md5 systems to support passwords of at least 14 # bytes with extra credit of 2 for digits and 2 for others the new # password must have at least three bytes that are not present in the # old password # password required pam_cracklib.so \ difok=3 minlen=15 dcredit= 2 ocredit=2 password required pam_unix.so use_authtok nullok md5 And here is another example in case you don't want to use credits: #%PAM-1.0 # # These lines require the user to select a password with a minimum # length of 8 and with at least 1 digit number, 1 upper case letter, # and 1 other character # password required pam_cracklib.so \ dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8 password required pam_unix.so use_authtok nullok md5 SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_cracklib was written by Cristian Gafton <gafton@redhat.com> Linux-PAM-1.1.8/modules/pam_cracklib/pam_cracklib.c0000644000000000000000000005773012160065211016762 00000000000000/* * pam_cracklib module */ /* * 0.9. switch to using a distance algorithm in similar() * 0.86. added support for setting minimum numbers of digits, uppers, * lowers, and others * 0.85. added six new options to use this with long passwords. * 0.8. tidied output and improved D(()) usage for debugging. * 0.7. added support for more obscure checks for new passwd. * 0.6. root can reset user passwd to any values (it's only warned) * 0.5. supports retries - 'retry=N' argument * 0.4. added argument 'type=XXX' for 'New XXX password' prompt * 0.3. Added argument 'debug' * 0.2. new password is feeded to cracklib for verify after typed once * 0.1. First release */ /* * Written by Cristian Gafton 1996/09/10 * Long password support by Philip W. Dalrymple 1997/07/18 * See the end of the file for Copyright Information * * Modification for long password systems (>8 chars). The original * module had problems when used in a md5 password system in that it * allowed too short passwords but required that at least half of the * bytes in the new password did not appear in the old one. this * action is still the default and the changes should not break any * current user. This modification adds 6 new options, one to set the * number of bytes in the new password that are not in the old one, * the other five to control the length checking, these are all * documented (or will be before anyone else sees this code) in the PAM * S.A.G. in the section on the cracklib module. */ #include "config.h" #include #ifdef HAVE_LIBXCRYPT # include #elif defined(HAVE_CRYPT_H) # include #endif #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_CRACK_H #include #else extern char *FascistCheck(char *pw, const char *dictpath); #endif #ifndef CRACKLIB_DICTS #define CRACKLIB_DICTS NULL #endif /* For Translators: "%s%s" could be replaced with " " or "". */ #define PROMPT1 _("New %s%spassword: ") /* For Translators: "%s%s" could be replaced with " " or "". */ #define PROMPT2 _("Retype new %s%spassword: ") #define MISTYPED_PASS _("Sorry, passwords do not match.") #ifdef MIN #undef MIN #endif #define MIN(_a, _b) (((_a) < (_b)) ? (_a) : (_b)) /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #define PAM_SM_PASSWORD #include #include #include /* argument parsing */ #define PAM_DEBUG_ARG 0x0001 struct cracklib_options { int retry_times; int diff_ok; int min_length; int dig_credit; int up_credit; int low_credit; int oth_credit; int min_class; int max_repeat; int max_sequence; int max_class_repeat; int reject_user; int gecos_check; int enforce_for_root; const char *cracklib_dictpath; }; #define CO_RETRY_TIMES 1 #define CO_DIFF_OK 5 #define CO_MIN_LENGTH 9 # define CO_MIN_LENGTH_BASE 5 #define CO_DIG_CREDIT 1 #define CO_UP_CREDIT 1 #define CO_LOW_CREDIT 1 #define CO_OTH_CREDIT 1 #define CO_MIN_WORD_LENGTH 4 static int _pam_parse (pam_handle_t *pamh, struct cracklib_options *opt, int argc, const char **argv) { int ctrl=0; /* step through arguments */ for (ctrl=0; argc-- > 0; ++argv) { char *ep = NULL; /* generic options */ if (!strcmp(*argv,"debug")) ctrl |= PAM_DEBUG_ARG; else if (!strncmp(*argv,"type=",5)) pam_set_item (pamh, PAM_AUTHTOK_TYPE, *argv+5); else if (!strncmp(*argv,"retry=",6)) { opt->retry_times = strtol(*argv+6,&ep,10); if (!ep || (opt->retry_times < 1)) opt->retry_times = CO_RETRY_TIMES; } else if (!strncmp(*argv,"difok=",6)) { opt->diff_ok = strtol(*argv+6,&ep,10); if (!ep || (opt->diff_ok < 0)) opt->diff_ok = CO_DIFF_OK; } else if (!strncmp(*argv,"difignore=",10)) { /* just ignore */ } else if (!strncmp(*argv,"minlen=",7)) { opt->min_length = strtol(*argv+7,&ep,10); if (!ep || (opt->min_length < CO_MIN_LENGTH_BASE)) opt->min_length = CO_MIN_LENGTH_BASE; } else if (!strncmp(*argv,"dcredit=",8)) { opt->dig_credit = strtol(*argv+8,&ep,10); if (!ep) opt->dig_credit = 0; } else if (!strncmp(*argv,"ucredit=",8)) { opt->up_credit = strtol(*argv+8,&ep,10); if (!ep) opt->up_credit = 0; } else if (!strncmp(*argv,"lcredit=",8)) { opt->low_credit = strtol(*argv+8,&ep,10); if (!ep) opt->low_credit = 0; } else if (!strncmp(*argv,"ocredit=",8)) { opt->oth_credit = strtol(*argv+8,&ep,10); if (!ep) opt->oth_credit = 0; } else if (!strncmp(*argv,"minclass=",9)) { opt->min_class = strtol(*argv+9,&ep,10); if (!ep) opt->min_class = 0; if (opt->min_class > 4) opt->min_class = 4; } else if (!strncmp(*argv,"maxrepeat=",10)) { opt->max_repeat = strtol(*argv+10,&ep,10); if (!ep) opt->max_repeat = 0; } else if (!strncmp(*argv,"maxsequence=",12)) { opt->max_sequence = strtol(*argv+12,&ep,10); if (!ep) opt->max_sequence = 0; } else if (!strncmp(*argv,"maxclassrepeat=",15)) { opt->max_class_repeat = strtol(*argv+15,&ep,10); if (!ep) opt->max_class_repeat = 0; } else if (!strncmp(*argv,"reject_username",15)) { opt->reject_user = 1; } else if (!strncmp(*argv,"gecoscheck",10)) { opt->gecos_check = 1; } else if (!strncmp(*argv,"enforce_for_root",16)) { opt->enforce_for_root = 1; } else if (!strncmp(*argv,"authtok_type",12)) { /* for pam_get_authtok, ignore */; } else if (!strncmp(*argv,"use_authtok",11)) { /* for pam_get_authtok, ignore */; } else if (!strncmp(*argv,"use_first_pass",14)) { /* for pam_get_authtok, ignore */; } else if (!strncmp(*argv,"try_first_pass",14)) { /* for pam_get_authtok, ignore */; } else if (!strncmp(*argv,"dictpath=",9)) { opt->cracklib_dictpath = *argv+9; if (!*(opt->cracklib_dictpath)) { opt->cracklib_dictpath = CRACKLIB_DICTS; } } else { pam_syslog(pamh,LOG_ERR,"pam_parse: unknown option; %s",*argv); } } return ctrl; } /* Helper functions */ /* * can't be a palindrome - like `R A D A R' or `M A D A M' */ static int palindrome(const char *new) { int i, j; i = strlen (new); for (j = 0;j < i;j++) if (new[i - j - 1] != new[j]) return 0; return 1; } /* * Calculate how different two strings are in terms of the number of * character removals, additions, and changes needed to go from one to * the other */ static int distdifferent(const char *old, const char *new, size_t i, size_t j) { char c, d; if ((i == 0) || (strlen(old) < i)) { c = 0; } else { c = old[i - 1]; } if ((j == 0) || (strlen(new) < j)) { d = 0; } else { d = new[j - 1]; } return (c != d); } static int distcalculate(int **distances, const char *old, const char *new, size_t i, size_t j) { int tmp = 0; if (distances[i][j] != -1) { return distances[i][j]; } tmp = distcalculate(distances, old, new, i - 1, j - 1); tmp = MIN(tmp, distcalculate(distances, old, new, i, j - 1)); tmp = MIN(tmp, distcalculate(distances, old, new, i - 1, j)); tmp += distdifferent(old, new, i, j); distances[i][j] = tmp; return tmp; } static int distance(const char *old, const char *new) { int **distances = NULL; size_t m, n, i, j, r; m = strlen(old); n = strlen(new); distances = malloc(sizeof(int*) * (m + 1)); for (i = 0; i <= m; i++) { distances[i] = malloc(sizeof(int) * (n + 1)); for(j = 0; j <= n; j++) { distances[i][j] = -1; } } for (i = 0; i <= m; i++) { distances[i][0] = i; } for (j = 0; j <= n; j++) { distances[0][j] = j; } distances[0][0] = 0; r = distcalculate(distances, old, new, m, n); for (i = 0; i <= m; i++) { memset(distances[i], 0, sizeof(int) * (n + 1)); free(distances[i]); } free(distances); return r; } static int similar(struct cracklib_options *opt, const char *old, const char *new) { if (distance(old, new) >= opt->diff_ok) { return 0; } if (strlen(new) >= (strlen(old) * 2)) { return 0; } /* passwords are too similar */ return 1; } /* * enough classes of charecters */ static int minclass (struct cracklib_options *opt, const char *new) { int digits = 0; int uppers = 0; int lowers = 0; int others = 0; int total_class; int i; int retval; D(( "called" )); for (i = 0; new[i]; i++) { if (isdigit (new[i])) digits = 1; else if (isupper (new[i])) uppers = 1; else if (islower (new[i])) lowers = 1; else others = 1; } total_class = digits + uppers + lowers + others; D (("total class: %d\tmin_class: %d", total_class, opt->min_class)); if (total_class >= opt->min_class) retval = 0; else retval = 1; return retval; } /* * a nice mix of characters. */ static int simple(struct cracklib_options *opt, const char *new) { int digits = 0; int uppers = 0; int lowers = 0; int others = 0; int size; int i; enum { NONE, DIGIT, UCASE, LCASE, OTHER } prevclass = NONE; int sameclass = 0; for (i = 0;new[i];i++) { if (isdigit (new[i])) { digits++; if (prevclass != DIGIT) { prevclass = DIGIT; sameclass = 1; } else sameclass++; } else if (isupper (new[i])) { uppers++; if (prevclass != UCASE) { prevclass = UCASE; sameclass = 1; } else sameclass++; } else if (islower (new[i])) { lowers++; if (prevclass != LCASE) { prevclass = LCASE; sameclass = 1; } else sameclass++; } else { others++; if (prevclass != OTHER) { prevclass = OTHER; sameclass = 1; } else sameclass++; } if (opt->max_class_repeat > 1 && sameclass > opt->max_class_repeat) { return 1; } } /* * The scam was this - a password of only one character type * must be 8 letters long. Two types, 7, and so on. * This is now changed, the base size and the credits or defaults * see the docs on the module for info on these parameters, the * defaults cause the effect to be the same as before the change */ if ((opt->dig_credit >= 0) && (digits > opt->dig_credit)) digits = opt->dig_credit; if ((opt->up_credit >= 0) && (uppers > opt->up_credit)) uppers = opt->up_credit; if ((opt->low_credit >= 0) && (lowers > opt->low_credit)) lowers = opt->low_credit; if ((opt->oth_credit >= 0) && (others > opt->oth_credit)) others = opt->oth_credit; size = opt->min_length; if (opt->dig_credit >= 0) size -= digits; else if (digits < opt->dig_credit * -1) return 1; if (opt->up_credit >= 0) size -= uppers; else if (uppers < opt->up_credit * -1) return 1; if (opt->low_credit >= 0) size -= lowers; else if (lowers < opt->low_credit * -1) return 1; if (opt->oth_credit >= 0) size -= others; else if (others < opt->oth_credit * -1) return 1; if (size <= i) return 0; return 1; } static int consecutive(struct cracklib_options *opt, const char *new) { char c; int i; int same; if (opt->max_repeat == 0) return 0; for (i = 0; new[i]; i++) { if (i > 0 && new[i] == c) { ++same; if (same > opt->max_repeat) return 1; } else { c = new[i]; same = 1; } } return 0; } static int sequence(struct cracklib_options *opt, const char *new) { char c; int i; int sequp = 1; int seqdown = 1; if (opt->max_sequence == 0) return 0; if (new[0] == '\0') return 0; for (i = 1; new[i]; i++) { c = new[i-1]; if (new[i] == c+1) { ++sequp; if (sequp > opt->max_sequence) return 1; seqdown = 1; } else if (new[i] == c-1) { ++seqdown; if (seqdown > opt->max_sequence) return 1; sequp = 1; } else { sequp = 1; seqdown = 1; } } return 0; } static int wordcheck(const char *new, char *word) { char *f, *b; if (strstr(new, word) != NULL) return 1; /* now reverse the word, we can do that in place as it is strdup-ed */ f = word; b = word+strlen(word)-1; while (f < b) { char c; c = *f; *f = *b; *b = c; --b; ++f; } if (strstr(new, word) != NULL) return 1; return 0; } static int usercheck(struct cracklib_options *opt, const char *new, char *user) { if (!opt->reject_user) return 0; return wordcheck(new, user); } static char * str_lower(char *string) { char *cp; if (!string) return NULL; for (cp = string; *cp; cp++) *cp = tolower(*cp); return string; } static int gecoscheck(pam_handle_t *pamh, struct cracklib_options *opt, const char *new, const char *user) { struct passwd *pwd; char *list; char *p; char *next; if (!opt->gecos_check) return 0; if ((pwd = pam_modutil_getpwnam(pamh, user)) == NULL) { return 0; } list = strdup(pwd->pw_gecos); if (list == NULL || *list == '\0') { free(list); return 0; } for (p = list;;p = next + 1) { next = strchr(p, ' '); if (next) *next = '\0'; if (strlen(p) >= CO_MIN_WORD_LENGTH) { str_lower(p); if (wordcheck(new, p)) { free(list); return 1; } } if (!next) break; } free(list); return 0; } static const char *password_check(pam_handle_t *pamh, struct cracklib_options *opt, const char *old, const char *new, const char *user) { const char *msg = NULL; char *oldmono = NULL, *newmono, *wrapped = NULL; char *usermono = NULL; if (old && strcmp(new, old) == 0) { msg = _("is the same as the old one"); return msg; } newmono = str_lower(x_strdup(new)); if (!newmono) msg = _("memory allocation error"); usermono = str_lower(x_strdup(user)); if (!usermono) msg = _("memory allocation error"); if (!msg && old) { oldmono = str_lower(x_strdup(old)); if (oldmono) wrapped = malloc(strlen(oldmono) * 2 + 1); if (wrapped) { strcpy (wrapped, oldmono); strcat (wrapped, oldmono); } else { msg = _("memory allocation error"); } } if (!msg && palindrome(newmono)) msg = _("is a palindrome"); if (!msg && oldmono && strcmp(oldmono, newmono) == 0) msg = _("case changes only"); if (!msg && oldmono && similar(opt, oldmono, newmono)) msg = _("is too similar to the old one"); if (!msg && simple(opt, new)) msg = _("is too simple"); if (!msg && wrapped && strstr(wrapped, newmono)) msg = _("is rotated"); if (!msg && minclass (opt, new)) msg = _("not enough character classes"); if (!msg && consecutive(opt, new)) msg = _("contains too many same characters consecutively"); if (!msg && sequence(opt, new)) msg = _("contains too long of a monotonic character sequence"); if (!msg && (usercheck(opt, newmono, usermono) || gecoscheck(pamh, opt, newmono, user))) msg = _("contains the user name in some form"); free(usermono); if (newmono) { memset(newmono, 0, strlen(newmono)); free(newmono); } if (oldmono) { memset(oldmono, 0, strlen(oldmono)); free(oldmono); } if (wrapped) { memset(wrapped, 0, strlen(wrapped)); free(wrapped); } return msg; } static int _pam_unix_approve_pass(pam_handle_t *pamh, unsigned int ctrl, struct cracklib_options *opt, const char *pass_old, const char *pass_new) { const char *msg = NULL; const char *user; int retval; if (pass_new == NULL || (pass_old && !strcmp(pass_old,pass_new))) { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_DEBUG, "bad authentication token"); pam_error(pamh, "%s", pass_new == NULL ? _("No password supplied"):_("Password unchanged")); return PAM_AUTHTOK_ERR; } retval = pam_get_user(pamh, &user, NULL); if (retval != PAM_SUCCESS || user == NULL) { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh,LOG_ERR,"Can not get username"); return PAM_AUTHTOK_ERR; } /* * if one wanted to hardwire authentication token strength * checking this would be the place */ msg = password_check(pamh, opt, pass_old, pass_new, user); if (msg) { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_NOTICE, "new passwd fails strength check: %s", msg); pam_error(pamh, _("BAD PASSWORD: %s"), msg); return PAM_AUTHTOK_ERR; }; return PAM_SUCCESS; } /* The Main Thing (by Cristian Gafton, CEO at this module :-) * (stolen from http://home.netscape.com) */ PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv) { unsigned int ctrl; struct cracklib_options options; D(("called.")); memset(&options, 0, sizeof(options)); options.retry_times = CO_RETRY_TIMES; options.diff_ok = CO_DIFF_OK; options.min_length = CO_MIN_LENGTH; options.dig_credit = CO_DIG_CREDIT; options.up_credit = CO_UP_CREDIT; options.low_credit = CO_LOW_CREDIT; options.oth_credit = CO_OTH_CREDIT; options.cracklib_dictpath = CRACKLIB_DICTS; ctrl = _pam_parse(pamh, &options, argc, argv); if (flags & PAM_PRELIM_CHECK) { /* Check for passwd dictionary */ /* We cannot do that, since the original path is compiled into the cracklib library and we don't know it. */ return PAM_SUCCESS; } else if (flags & PAM_UPDATE_AUTHTOK) { int retval; const void *oldtoken; int tries; D(("do update")); retval = pam_get_item (pamh, PAM_OLDAUTHTOK, &oldtoken); if (retval != PAM_SUCCESS) { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh,LOG_ERR,"Can not get old passwd"); oldtoken = NULL; } tries = 0; while (tries < options.retry_times) { const char *crack_msg; const char *newtoken = NULL; tries++; /* Planned modus operandi: * Get a passwd. * Verify it against cracklib. * If okay get it a second time. * Check to be the same with the first one. * set PAM_AUTHTOK and return */ retval = pam_get_authtok_noverify (pamh, &newtoken, NULL); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "pam_get_authtok_noverify returned error: %s", pam_strerror (pamh, retval)); continue; } else if (newtoken == NULL) { /* user aborted password change, quit */ return PAM_AUTHTOK_ERR; } D(("testing password")); /* now test this passwd against cracklib */ D(("against cracklib")); if ((crack_msg = FascistCheck (newtoken, options.cracklib_dictpath))) { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh,LOG_DEBUG,"bad password: %s",crack_msg); pam_error (pamh, _("BAD PASSWORD: %s"), crack_msg); if (getuid() || options.enforce_for_root || (flags & PAM_CHANGE_EXPIRED_AUTHTOK)) { pam_set_item (pamh, PAM_AUTHTOK, NULL); retval = PAM_AUTHTOK_ERR; continue; } } /* check it for strength too... */ D(("for strength")); retval = _pam_unix_approve_pass (pamh, ctrl, &options, oldtoken, newtoken); if (retval != PAM_SUCCESS) { if (getuid() || options.enforce_for_root || (flags & PAM_CHANGE_EXPIRED_AUTHTOK)) { pam_set_item(pamh, PAM_AUTHTOK, NULL); retval = PAM_AUTHTOK_ERR; continue; } } retval = pam_get_authtok_verify (pamh, &newtoken, NULL); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "pam_get_authtok_verify returned error: %s", pam_strerror (pamh, retval)); pam_set_item(pamh, PAM_AUTHTOK, NULL); continue; } else if (newtoken == NULL) { /* user aborted password change, quit */ return PAM_AUTHTOK_ERR; } return PAM_SUCCESS; } D(("returning because maxtries reached")); pam_set_item (pamh, PAM_AUTHTOK, NULL); /* if we have only one try, we can use the real reason, else say that there were too many tries. */ if (options.retry_times > 1) return PAM_MAXTRIES; else return retval; } else { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_NOTICE, "UNKNOWN flags setting %02X",flags); return PAM_SERVICE_ERR; } /* Not reached */ return PAM_SERVICE_ERR; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_cracklib_modstruct = { "pam_cracklib", NULL, NULL, NULL, NULL, NULL, pam_sm_chauthtok }; #endif /* * Copyright (c) Cristian Gafton , 1996. * 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, 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. * * The following copyright was appended for the long password support * added with the libpam 0.58 release: * * Modificaton Copyright (c) Philip W. Dalrymple III * 1997. All rights reserved * * THE MODIFICATION THAT PROVIDES SUPPORT FOR LONG PASSWORD TYPE CHECKING TO * 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. */ Linux-PAM-1.1.8/modules/pam_cracklib/Makefile.in0000644000000000000000000006046612216527535016272 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_cracklib DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_cracklib_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_cracklib_la_SOURCES = pam_cracklib.c pam_cracklib_la_OBJECTS = pam_cracklib.lo @HAVE_LIBCRACK_TRUE@am_pam_cracklib_la_rpath = -rpath $(securelibdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_cracklib.c DIST_SOURCES = pam_cracklib.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(XMLS) pam_cracklib.8 tst-pam_cracklib @HAVE_LIBCRACK_TRUE@TESTS = tst-pam_cracklib @HAVE_LIBCRACK_TRUE@man_MANS = pam_cracklib.8 XMLS = README.xml pam_cracklib.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) pam_cracklib_la_LIBADD = $(top_builddir)/libpam/libpam.la \ @LIBCRACK@ @LIBCRYPT@ @HAVE_LIBCRACK_TRUE@securelib_LTLIBRARIES = pam_cracklib.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README pam_cracklib.8 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_cracklib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_cracklib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_cracklib.la: $(pam_cracklib_la_OBJECTS) $(pam_cracklib_la_DEPENDENCIES) $(LINK) $(am_pam_cracklib_la_rpath) $(pam_cracklib_la_OBJECTS) $(pam_cracklib_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_cracklib.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_cracklib.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_cracklib/README.xml0000644000000000000000000000224312160065211015653 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_cracklib.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_cracklib-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_issue/0000755000000000000000000000000012216542311013634 500000000000000Linux-PAM-1.1.8/modules/pam_issue/tst-pam_issue0000755000000000000000000000006412160065211016274 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_issue.so Linux-PAM-1.1.8/modules/pam_issue/pam_issue.c0000644000000000000000000001563512160065211015714 00000000000000/* pam_issue module - a simple /etc/issue parser to set PAM_USER_PROMPT * * Copyright 1999 by Ben Collins * * Needs to be called before any other auth modules so we can setup the * user prompt before it's first used. Allows one argument option, which * is the full path to a file to be used for issue (uses /etc/issue as a * default) such as "issue=/etc/issue.telnet". * * We can also parse escapes within the the issue file (enabled by * default, but can be disabled with the "noesc" option). It's the exact * same parsing as util-linux's agetty program performs. * * Released under the GNU LGPL version 2 or later */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #define PAM_SM_AUTH #include #include #include static int _user_prompt_set = 0; static int read_issue_raw(pam_handle_t *pamh, FILE *fp, char **prompt); static int read_issue_quoted(pam_handle_t *pamh, FILE *fp, char **prompt); /* --- authentication management functions (only) --- */ PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int retval = PAM_SERVICE_ERR; FILE *fp; const char *issue_file = NULL; int parse_esc = 1; const void *item = NULL; const char *cur_prompt; char *issue_prompt = NULL; /* If we've already set the prompt, don't set it again */ if(_user_prompt_set) return PAM_IGNORE; /* We set this here so if we fail below, we wont get further than this next time around (only one real failure) */ _user_prompt_set = 1; for ( ; argc-- > 0 ; ++argv ) { if (!strncmp(*argv,"issue=",6)) { issue_file = 6 + *argv; D(("set issue_file to: %s", issue_file)); } else if (!strcmp(*argv,"noesc")) { parse_esc = 0; D(("turning off escape parsing by request")); } else D(("unknown option passed: %s", *argv)); } if (issue_file == NULL) issue_file = "/etc/issue"; if ((fp = fopen(issue_file, "r")) == NULL) { pam_syslog(pamh, LOG_ERR, "error opening %s: %m", issue_file); return PAM_SERVICE_ERR; } if ((retval = pam_get_item(pamh, PAM_USER_PROMPT, &item)) != PAM_SUCCESS) { fclose(fp); return retval; } cur_prompt = item; if (cur_prompt == NULL) cur_prompt = ""; if (parse_esc) retval = read_issue_quoted(pamh, fp, &issue_prompt); else retval = read_issue_raw(pamh, fp, &issue_prompt); fclose(fp); if (retval != PAM_SUCCESS) goto out; { size_t size = strlen(issue_prompt) + strlen(cur_prompt) + 1; char *new_prompt = realloc(issue_prompt, size); if (new_prompt == NULL) { pam_syslog(pamh, LOG_ERR, "out of memory"); retval = PAM_BUF_ERR; goto out; } issue_prompt = new_prompt; } strcat(issue_prompt, cur_prompt); retval = pam_set_item(pamh, PAM_USER_PROMPT, (const void *) issue_prompt); out: _pam_drop(issue_prompt); return (retval == PAM_SUCCESS) ? PAM_IGNORE : retval; } PAM_EXTERN int pam_sm_setcred (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_IGNORE; } static int read_issue_raw(pam_handle_t *pamh, FILE *fp, char **prompt) { char *issue; struct stat st; *prompt = NULL; if (fstat(fileno(fp), &st) < 0) { pam_syslog(pamh, LOG_ERR, "stat error: %m"); return PAM_SERVICE_ERR; } if ((issue = malloc(st.st_size + 1)) == NULL) { pam_syslog(pamh, LOG_ERR, "out of memory"); return PAM_BUF_ERR; } if ((off_t)fread(issue, 1, st.st_size, fp) != st.st_size) { pam_syslog(pamh, LOG_ERR, "read error: %m"); _pam_drop(issue); return PAM_SERVICE_ERR; } issue[st.st_size] = '\0'; *prompt = issue; return PAM_SUCCESS; } static int read_issue_quoted(pam_handle_t *pamh, FILE *fp, char **prompt) { int c; size_t size = 1024; char *issue; struct utsname uts; *prompt = NULL; if ((issue = malloc(size)) == NULL) { pam_syslog(pamh, LOG_ERR, "out of memory"); return PAM_BUF_ERR; } issue[0] = '\0'; (void) uname(&uts); while ((c = getc(fp)) != EOF) { char buf[1024]; buf[0] = '\0'; if (c == '\\') { if ((c = getc(fp)) == EOF) break; switch (c) { case 's': strncat(buf, uts.sysname, sizeof(buf) - 1); break; case 'n': strncat(buf, uts.nodename, sizeof(buf) - 1); break; case 'r': strncat(buf, uts.release, sizeof(buf) - 1); break; case 'v': strncat(buf, uts.version, sizeof(buf) - 1); break; case 'm': strncat(buf, uts.machine, sizeof(buf) - 1); break; case 'o': { char domainname[256]; if (getdomainname(domainname, sizeof(domainname)) >= 0) { domainname[sizeof(domainname)-1] = '\0'; strncat(buf, domainname, sizeof(buf) - 1); } } break; case 'd': case 't': { const char *weekday[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; const char *month[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; time_t now; struct tm *tm; (void) time (&now); tm = localtime(&now); if (c == 'd') snprintf (buf, sizeof buf, "%s %s %d %d", weekday[tm->tm_wday], month[tm->tm_mon], tm->tm_mday, tm->tm_year + 1900); else snprintf (buf, sizeof buf, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); } break; case 'l': { char *ttyn = ttyname(1); if (ttyn) { if (!strncmp(ttyn, "/dev/", 5)) ttyn += 5; strncat(buf, ttyn, sizeof(buf) - 1); } } break; case 'u': case 'U': { unsigned int users = 0; struct utmp *ut; setutent(); while ((ut = getutent())) { if (ut->ut_type == USER_PROCESS) ++users; } endutent(); if (c == 'U') snprintf (buf, sizeof buf, "%u %s", users, (users == 1) ? "user" : "users"); else snprintf (buf, sizeof buf, "%u", users); break; } default: buf[0] = c; buf[1] = '\0'; } } else { buf[0] = c; buf[1] = '\0'; } if ((strlen(issue) + strlen(buf)) + 1 > size) { char *new_issue; size += strlen(buf) + 1; new_issue = (char *) realloc (issue, size); if (new_issue == NULL) { _pam_drop(issue); return PAM_BUF_ERR; } issue = new_issue; strcat(issue, buf); } } if (ferror(fp)) { pam_syslog(pamh, LOG_ERR, "read error: %m"); _pam_drop(issue); return PAM_SERVICE_ERR; } *prompt = issue; return PAM_SUCCESS; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_issue_modstruct = { "pam_issue", pam_sm_authenticate, pam_sm_setcred, NULL, NULL, NULL, NULL, }; #endif /* end of module definition */ Linux-PAM-1.1.8/modules/pam_issue/Makefile.am0000644000000000000000000000133712160065211015611 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_issue man_MANS = pam_issue.8 XMLS = README.xml pam_issue.8.xml TESTS = tst-pam_issue securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_issue.la pam_issue_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_issue.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_issue/README0000644000000000000000000000251412216527577014457 00000000000000pam_issue — PAM module to add issue file to user prompt ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_issue is a PAM module to prepend an issue file to the username prompt. It also by default parses escape codes in the issue file similar to some common getty's (using \x format). Recognized escapes: \d current day \l name of this tty \m machine architecture (uname -m) \n machine's network node hostname (uname -n) \o domain name of this system \r release number of operating system (uname -r) \t current time \s operating system name (uname -s) \u number of users currently logged in \U same as \u except it is suffixed with "user" or "users" (eg. "1 user" or "10 users") \v operating system version and build date (uname -v) OPTIONS noesc Turns off escape code parsing. issue=issue-file-name The file to output if not using the default. EXAMPLES Add the following line to /etc/pam.d/login to set the user specific issue at login: auth optional pam_issue.so issue=/etc/issue AUTHOR pam_issue was written by Ben Collins . Linux-PAM-1.1.8/modules/pam_issue/pam_issue.8.xml0000644000000000000000000001414212160065211016430 00000000000000 pam_issue 8 Linux-PAM Manual pam_issue PAM module to add issue file to user prompt pam_issue.so noesc issue=issue-file-name DESCRIPTION pam_issue is a PAM module to prepend an issue file to the username prompt. It also by default parses escape codes in the issue file similar to some common getty's (using \x format). Recognized escapes: \d current day \l name of this tty \m machine architecture (uname -m) \n machine's network node hostname (uname -n) \o domain name of this system \r release number of operating system (uname -r) \t current time \s operating system name (uname -s) \u number of users currently logged in \U same as \u except it is suffixed with "user" or "users" (eg. "1 user" or "10 users") \v operating system version and build date (uname -v) OPTIONS Turns off escape code parsing. The file to output if not using the default. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_IGNORE The prompt was already changed. PAM_SERVICE_ERR A service module error occurred. PAM_SUCCESS The new prompt was set successfully. EXAMPLES Add the following line to /etc/pam.d/login to set the user specific issue at login: auth optional pam_issue.so issue=/etc/issue SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_issue was written by Ben Collins <bcollins@debian.org>. Linux-PAM-1.1.8/modules/pam_issue/Makefile.in0000644000000000000000000006007212216527536015642 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_issue DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_issue_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_issue_la_SOURCES = pam_issue.c pam_issue_la_OBJECTS = pam_issue.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_issue.c DIST_SOURCES = pam_issue.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_issue man_MANS = pam_issue.8 XMLS = README.xml pam_issue.8.xml TESTS = tst-pam_issue securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_issue.la pam_issue_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_issue/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_issue/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_issue.la: $(pam_issue_la_OBJECTS) $(pam_issue_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_issue_la_OBJECTS) $(pam_issue_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_issue.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_issue.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_issue/pam_issue.80000644000000000000000000000620012216527577015651 00000000000000'\" t .\" Title: pam_issue .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_ISSUE" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_issue \- PAM module to add issue file to user prompt .SH "SYNOPSIS" .HP \w'\fBpam_issue\&.so\fR\ 'u \fBpam_issue\&.so\fR [noesc] [issue=\fIissue\-file\-name\fR] .SH "DESCRIPTION" .PP pam_issue is a PAM module to prepend an issue file to the username prompt\&. It also by default parses escape codes in the issue file similar to some common getty\*(Aqs (using \ex format)\&. .PP Recognized escapes: .PP \fB\ed\fR .RS 4 current day .RE .PP \fB\el\fR .RS 4 name of this tty .RE .PP \fB\em\fR .RS 4 machine architecture (uname \-m) .RE .PP \fB\en\fR .RS 4 machine\*(Aqs network node hostname (uname \-n) .RE .PP \fB\eo\fR .RS 4 domain name of this system .RE .PP \fB\er\fR .RS 4 release number of operating system (uname \-r) .RE .PP \fB\et\fR .RS 4 current time .RE .PP \fB\es\fR .RS 4 operating system name (uname \-s) .RE .PP \fB\eu\fR .RS 4 number of users currently logged in .RE .PP \fB\eU\fR .RS 4 same as \eu except it is suffixed with "user" or "users" (eg\&. "1 user" or "10 users") .RE .PP \fB\ev\fR .RS 4 operating system version and build date (uname \-v) .RE .SH "OPTIONS" .PP .PP \fBnoesc\fR .RS 4 Turns off escape code parsing\&. .RE .PP \fBissue=\fR\fB\fIissue\-file\-name\fR\fR .RS 4 The file to output if not using the default\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBauth\fR module type is provided\&. .SH "RETURN VALUES" .PP .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_IGNORE .RS 4 The prompt was already changed\&. .RE .PP PAM_SERVICE_ERR .RS 4 A service module error occurred\&. .RE .PP PAM_SUCCESS .RS 4 The new prompt was set successfully\&. .RE .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/login to set the user specific issue at login: .sp .if n \{\ .RS 4 .\} .nf auth optional pam_issue\&.so issue=/etc/issue .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_issue was written by Ben Collins \&. Linux-PAM-1.1.8/modules/pam_issue/README.xml0000644000000000000000000000220212160065211015224 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_issue.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_issue-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_loginuid/0000755000000000000000000000000012216542311014316 500000000000000Linux-PAM-1.1.8/modules/pam_loginuid/tst-pam_loginuid0000755000000000000000000000006712160065211017443 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_loginuid.so Linux-PAM-1.1.8/modules/pam_loginuid/pam_loginuid.80000644000000000000000000000532412216527602017010 00000000000000'\" t .\" Title: pam_loginuid .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_LOGINUID" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_loginuid \- Record user\*(Aqs login uid to the process attribute .SH "SYNOPSIS" .HP \w'\fBpam_loginuid\&.so\fR\ 'u \fBpam_loginuid\&.so\fR [require_auditd] .SH "DESCRIPTION" .PP The pam_loginuid module sets the loginuid process attribute for the process that was authenticated\&. This is necessary for applications to be correctly audited\&. This PAM module should only be used for entry point applications like: login, sshd, gdm, vsftpd, crond and atd\&. There are probably other entry point applications besides these\&. You should not use it for applications like sudo or su as that defeats the purpose by changing the loginuid to the account they just switched to\&. .SH "OPTIONS" .PP \fBrequire_auditd\fR .RS 4 This option, when given, will cause this module to query the audit daemon status and deny logins if it is not running\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBsession\fR module type is provided\&. .SH "RETURN VALUES" .PP .PP PAM_SESSION_ERR .RS 4 An error occurred during session management\&. .RE .SH "EXAMPLES" .sp .if n \{\ .RS 4 .\} .nf #%PAM\-1\&.0 auth required pam_unix\&.so auth required pam_nologin\&.so account required pam_unix\&.so password required pam_unix\&.so session required pam_unix\&.so session required pam_loginuid\&.so .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8), \fBauditctl\fR(8), \fBauditd\fR(8) .SH "AUTHOR" .PP pam_loginuid was written by Steve Grubb Linux-PAM-1.1.8/modules/pam_loginuid/Makefile.am0000644000000000000000000000140012160065211016262 00000000000000# # Copyright (c) 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_loginuid man_MANS = pam_loginuid.8 XMLS = README.xml pam_loginuid.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_loginuid.la pam_loginuid_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBAUDIT@ if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_loginuid.8.xml -include $(top_srcdir)/Make.xml.rules endif TESTS = tst-pam_loginuid Linux-PAM-1.1.8/modules/pam_loginuid/README0000644000000000000000000000213512216527602015125 00000000000000pam_loginuid — Record user's login uid to the process attribute ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_loginuid module sets the loginuid process attribute for the process that was authenticated. This is necessary for applications to be correctly audited. This PAM module should only be used for entry point applications like: login, sshd, gdm, vsftpd, crond and atd. There are probably other entry point applications besides these. You should not use it for applications like sudo or su as that defeats the purpose by changing the loginuid to the account they just switched to. EXAMPLES #%PAM-1.0 auth required pam_unix.so auth required pam_nologin.so account required pam_unix.so password required pam_unix.so session required pam_unix.so session required pam_loginuid.so AUTHOR pam_loginuid was written by Steve Grubb Linux-PAM-1.1.8/modules/pam_loginuid/pam_loginuid.c0000644000000000000000000001350012160065211017045 00000000000000/* pam_loginuid.c -- * Copyright 2005 Red Hat Inc., Durham, North Carolina. * All Rights Reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Suite 500 * Boston, MA 02110-1335 USA * * Authors: * Steve Grubb * * PAM module that sets the login uid introduced in kernel 2.6.11 */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_LIBAUDIT #include #include #include #endif /* * This function writes the loginuid to the /proc system. It returns * 0 on success and 1 on failure. */ static int set_loginuid(pam_handle_t *pamh, uid_t uid) { int fd, count, rc = 0; char loginuid[24]; count = snprintf(loginuid, sizeof(loginuid), "%lu", (unsigned long)uid); fd = open("/proc/self/loginuid", O_NOFOLLOW|O_WRONLY|O_TRUNC); if (fd < 0) { if (errno != ENOENT) { rc = 1; pam_syslog(pamh, LOG_ERR, "Cannot open /proc/self/loginuid: %m"); } return rc; } if (pam_modutil_write(fd, loginuid, count) != count) rc = 1; close(fd); return rc; } #ifdef HAVE_LIBAUDIT /* * This function is called only if "require_auditd" option is passed. It is * called after loginuid has been set. The purpose is to disallow logins * should the audit daemon not be running or crashed. It returns PAM_SUCCESS * if the audit daemon is running and PAM_SESSION_ERR otherwise. */ static int check_auditd(void) { int fd, retval; fd = audit_open(); if (fd < 0) { /* This is here to let people that build their own kernel and disable the audit system get in. You get these error codes only when the kernel doesn't have audit compiled in. */ if (errno == EINVAL || errno == EPROTONOSUPPORT || errno == EAFNOSUPPORT) return PAM_SUCCESS; return PAM_SESSION_ERR; } retval = audit_request_status(fd); if (retval > 0) { struct audit_reply rep; int i; int timeout = 30; /* tenths of seconds */ fd_set read_mask; FD_ZERO(&read_mask); FD_SET(fd, &read_mask); for (i = 0; i < timeout; i++) { struct timeval t; int rc; t.tv_sec = 0; t.tv_usec = 100000; do { rc = select(fd+1, &read_mask, NULL, NULL, &t); } while (rc < 0 && errno == EINTR); rc = audit_get_reply(fd, &rep, GET_REPLY_NONBLOCKING,0); if (rc > 0) { /* If we get done or error, break out */ if (rep.type == NLMSG_DONE || rep.type == NLMSG_ERROR) break; /* If its not status, keep looping */ if (rep.type != AUDIT_GET) continue; /* Found it... */ close(fd); if (rep.status->pid == 0) return PAM_SESSION_ERR; else return PAM_SUCCESS; } } } close(fd); if (retval == -ECONNREFUSED) { /* This is here to let people that build their own kernel and disable the audit system get in. ECONNREFUSED is issued by the kernel when there is "no on listening". */ return PAM_SUCCESS; } else if (retval == -EPERM && getuid() != 0) { /* If we get this, then the kernel supports auditing * but we don't have enough privilege to write to the * socket. Therefore, we have already been authenticated * and we are a common user. Just act as though auditing * is not enabled. Any other error we take seriously. */ return PAM_SUCCESS; } return PAM_SESSION_ERR; } #endif /* * Initialize audit session for user */ static int _pam_loginuid(pam_handle_t *pamh, int flags UNUSED, #ifdef HAVE_LIBAUDIT int argc, const char **argv #else int argc UNUSED, const char **argv UNUSED #endif ) { const char *user = NULL; struct passwd *pwd; #ifdef HAVE_LIBAUDIT int require_auditd = 0; #endif /* get user name */ if (pam_get_user(pamh, &user, NULL) != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "error recovering login user-name"); return PAM_SESSION_ERR; } /* get user info */ if ((pwd = pam_modutil_getpwnam(pamh, user)) == NULL) { pam_syslog(pamh, LOG_ERR, "error: login user-name '%s' does not exist", user); return PAM_SESSION_ERR; } if (set_loginuid(pamh, pwd->pw_uid)) { pam_syslog(pamh, LOG_ERR, "set_loginuid failed\n"); return PAM_SESSION_ERR; } #ifdef HAVE_LIBAUDIT while (argc-- > 0) { if (strcmp(*argv, "require_auditd") == 0) require_auditd = 1; argv++; } if (require_auditd) return check_auditd(); else #endif return PAM_SUCCESS; } /* * PAM routines * * This is here for vsftpd which doesn't seem to run the session stack */ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) { return _pam_loginuid(pamh, flags, argc, argv); } PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) { return _pam_loginuid(pamh, flags, argc, argv); } PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } /* static module data */ #ifdef PAM_STATIC struct pam_module _pam_loginuid_modstruct = { "pam_loginuid", NULL, NULL, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, NULL }; #endif Linux-PAM-1.1.8/modules/pam_loginuid/pam_loginuid.8.xml0000644000000000000000000000701312160065211017573 00000000000000 pam_loginuid 8 Linux-PAM Manual pam_loginuid Record user's login uid to the process attribute pam_loginuid.so require_auditd DESCRIPTION The pam_loginuid module sets the loginuid process attribute for the process that was authenticated. This is necessary for applications to be correctly audited. This PAM module should only be used for entry point applications like: login, sshd, gdm, vsftpd, crond and atd. There are probably other entry point applications besides these. You should not use it for applications like sudo or su as that defeats the purpose by changing the loginuid to the account they just switched to. OPTIONS This option, when given, will cause this module to query the audit daemon status and deny logins if it is not running. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_SESSION_ERR An error occurred during session management. EXAMPLES #%PAM-1.0 auth required pam_unix.so auth required pam_nologin.so account required pam_unix.so password required pam_unix.so session required pam_unix.so session required pam_loginuid.so SEE ALSO pam.conf5 , pam.d5 , pam8 , auditctl8 , auditd8 AUTHOR pam_loginuid was written by Steve Grubb <sgrubb@redhat.com> Linux-PAM-1.1.8/modules/pam_loginuid/Makefile.in0000644000000000000000000006021112216527536016317 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_loginuid DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_loginuid_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_loginuid_la_SOURCES = pam_loginuid.c pam_loginuid_la_OBJECTS = pam_loginuid.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_loginuid.c DIST_SOURCES = pam_loginuid.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_loginuid man_MANS = pam_loginuid.8 XMLS = README.xml pam_loginuid.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_loginuid.la pam_loginuid_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBAUDIT@ @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README TESTS = tst-pam_loginuid all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_loginuid/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_loginuid/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_loginuid.la: $(pam_loginuid_la_OBJECTS) $(pam_loginuid_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_loginuid_la_OBJECTS) $(pam_loginuid_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_loginuid.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_loginuid.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_loginuid/README.xml0000644000000000000000000000175412160065211015721 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_loginuid.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_loginuid-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_userdb/0000755000000000000000000000000012216542312013771 500000000000000Linux-PAM-1.1.8/modules/pam_userdb/tst-pam_userdb0000755000000000000000000000006512160065211016565 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_userdb.so Linux-PAM-1.1.8/modules/pam_userdb/pam_userdb.80000644000000000000000000001114012160067006016120 00000000000000'\" t .\" Title: pam_userdb .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 06/18/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_USERDB" "8" "06/18/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_userdb \- PAM module to authenticate against a db database .SH "SYNOPSIS" .HP \w'\fBpam_userdb\&.so\fR\ 'u \fBpam_userdb\&.so\fR db=\fI/path/database\fR [debug] [crypt=[crypt|none]] [icase] [dump] [try_first_pass] [use_first_pass] [unknown_ok] [key_only] .SH "DESCRIPTION" .PP The pam_userdb module is used to verify a username/password pair against values stored in a Berkeley DB database\&. The database is indexed by the username, and the data fields corresponding to the username keys are the passwords\&. .SH "OPTIONS" .PP \fBcrypt=[crypt|none]\fR .RS 4 Indicates whether encrypted or plaintext passwords are stored in the database\&. If it is \fBcrypt\fR, passwords should be stored in the database in \fBcrypt\fR(3) form\&. If \fBnone\fR is selected, passwords should be stored in the database as plaintext\&. .RE .PP \fBdb=\fR\fB\fI/path/database\fR\fR .RS 4 Use the /path/database database for performing lookup\&. There is no default; the module will return \fBPAM_IGNORE\fR if no database is provided\&. .RE .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBdump\fR .RS 4 Dump all the entries in the database to the log\&. Don\*(Aqt do this by default! .RE .PP \fBicase\fR .RS 4 Make the password verification to be case insensitive (ie when working with registration numbers and such)\&. Only works with plaintext password storage\&. .RE .PP \fBtry_first_pass\fR .RS 4 Use the authentication token previously obtained by another module that did the conversation with the application\&. If this token can not be obtained then the module will try to converse\&. This option can be used for stacking different modules that need to deal with the authentication tokens\&. .RE .PP \fBuse_first_pass\fR .RS 4 Use the authentication token previously obtained by another module that did the conversation with the application\&. If this token can not be obtained then the module will fail\&. This option can be used for stacking different modules that need to deal with the authentication tokens\&. .RE .PP \fBunknown_ok\fR .RS 4 Do not return error when checking for a user that is not in the database\&. This can be used to stack more than one pam_userdb module that will check a username/password pair in more than a database\&. .RE .PP \fBkey_only\fR .RS 4 The username and password are concatenated together in the database hash as \*(Aqusername\-password\*(Aq with a random value\&. if the concatenation of the username and password with a dash in the middle returns any result, the user is valid\&. this is useful in cases where the username may not be unique but the username and password pair are\&. .RE .SH "MODULE TYPES PROVIDED" .PP The \fBauth\fR and \fBaccount\fR module types are provided\&. .SH "RETURN VALUES" .PP PAM_AUTH_ERR .RS 4 Authentication failure\&. .RE .PP PAM_AUTHTOK_RECOVERY_ERR .RS 4 Authentication information cannot be recovered\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_CONV_ERR .RS 4 Conversation failure\&. .RE .PP PAM_SERVICE_ERR .RS 4 Error in service module\&. .RE .PP PAM_SUCCESS .RS 4 Success\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known to the underlying authentication module\&. .RE .SH "EXAMPLES" .sp .if n \{\ .RS 4 .\} .nf auth sufficient pam_userdb\&.so icase db=/etc/dbtest\&.db .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBcrypt\fR(3), \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_userdb was written by Cristian Gafton >gafton@redhat\&.com<\&. Linux-PAM-1.1.8/modules/pam_userdb/pam_userdb.8.xml0000644000000000000000000002023612160065211016721 00000000000000 pam_userdb 8 Linux-PAM Manual pam_userdb PAM module to authenticate against a db database pam_userdb.so db=/path/database debug crypt=[crypt|none] icase dump try_first_pass use_first_pass unknown_ok key_only DESCRIPTION The pam_userdb module is used to verify a username/password pair against values stored in a Berkeley DB database. The database is indexed by the username, and the data fields corresponding to the username keys are the passwords. OPTIONS Indicates whether encrypted or plaintext passwords are stored in the database. If it is , passwords should be stored in the database in crypt3 form. If is selected, passwords should be stored in the database as plaintext. Use the /path/database database for performing lookup. There is no default; the module will return PAM_IGNORE if no database is provided. Print debug information. Dump all the entries in the database to the log. Don't do this by default! Make the password verification to be case insensitive (ie when working with registration numbers and such). Only works with plaintext password storage. Use the authentication token previously obtained by another module that did the conversation with the application. If this token can not be obtained then the module will try to converse. This option can be used for stacking different modules that need to deal with the authentication tokens. Use the authentication token previously obtained by another module that did the conversation with the application. If this token can not be obtained then the module will fail. This option can be used for stacking different modules that need to deal with the authentication tokens. Do not return error when checking for a user that is not in the database. This can be used to stack more than one pam_userdb module that will check a username/password pair in more than a database. The username and password are concatenated together in the database hash as 'username-password' with a random value. if the concatenation of the username and password with a dash in the middle returns any result, the user is valid. this is useful in cases where the username may not be unique but the username and password pair are. MODULE TYPES PROVIDED The and module types are provided. RETURN VALUES PAM_AUTH_ERR Authentication failure. PAM_AUTHTOK_RECOVERY_ERR Authentication information cannot be recovered. PAM_BUF_ERR Memory buffer error. PAM_CONV_ERR Conversation failure. PAM_SERVICE_ERR Error in service module. PAM_SUCCESS Success. PAM_USER_UNKNOWN User not known to the underlying authentication module. EXAMPLES auth sufficient pam_userdb.so icase db=/etc/dbtest.db SEE ALSO crypt3 , pam.conf5 , pam.d5 , pam8 AUTHOR pam_userdb was written by Cristian Gafton >gafton@redhat.com<. Linux-PAM-1.1.8/modules/pam_userdb/pam_userdb.c0000644000000000000000000003450012160065211016174 00000000000000/* pam_userdb module */ /* * Written by Cristian Gafton 1996/09/10 * See the end of the file for Copyright Information */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_LIBXCRYPT #include #elif defined(HAVE_CRYPT_H) #include #endif #include "pam_userdb.h" #ifdef HAVE_NDBM_H # include #else # ifdef HAVE_DB_H # define DB_DBM_HSEARCH 1 /* use the dbm interface */ # define HAVE_DBM /* for BerkDB 5.0 and later */ # include # else # error "failed to find a libdb or equivalent" # endif #endif /* * here, we make a definition for the externally accessible function * in this file (this definition is required for static a module * but strongly encouraged generally) it is used to instruct the * modules include file to define the function prototypes. */ #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #include #include #include /* * Conversation function to obtain the user's password */ static int obtain_authtok(pam_handle_t *pamh) { char *resp; const void *item; int retval; retval = pam_prompt(pamh, PAM_PROMPT_ECHO_OFF, &resp, _("Password: ")); if (retval != PAM_SUCCESS) return retval; if (resp == NULL) return PAM_CONV_ERR; /* set the auth token */ retval = pam_set_item(pamh, PAM_AUTHTOK, resp); /* clean it up */ _pam_overwrite(resp); _pam_drop(resp); if ( (retval != PAM_SUCCESS) || (retval = pam_get_item(pamh, PAM_AUTHTOK, &item)) != PAM_SUCCESS ) { return retval; } return retval; } static int _pam_parse (pam_handle_t *pamh, int argc, const char **argv, const char **database, const char **cryptmode) { int ctrl; *database = NULL; *cryptmode = NULL; /* step through arguments */ for (ctrl = 0; argc-- > 0; ++argv) { /* generic options */ if (!strcmp(*argv,"debug")) ctrl |= PAM_DEBUG_ARG; else if (!strcasecmp(*argv, "icase")) ctrl |= PAM_ICASE_ARG; else if (!strcasecmp(*argv, "dump")) ctrl |= PAM_DUMP_ARG; else if (!strcasecmp(*argv, "unknown_ok")) ctrl |= PAM_UNKNOWN_OK_ARG; else if (!strcasecmp(*argv, "key_only")) ctrl |= PAM_KEY_ONLY_ARG; else if (!strcasecmp(*argv, "use_first_pass")) ctrl |= PAM_USE_FPASS_ARG; else if (!strcasecmp(*argv, "try_first_pass")) ctrl |= PAM_TRY_FPASS_ARG; else if (!strncasecmp(*argv,"db=", 3)) { *database = (*argv) + 3; if (**database == '\0') { *database = NULL; pam_syslog(pamh, LOG_ERR, "db= specification missing argument - ignored"); } } else if (!strncasecmp(*argv,"crypt=", 6)) { *cryptmode = (*argv) + 6; if (**cryptmode == '\0') pam_syslog(pamh, LOG_ERR, "crypt= specification missing argument - ignored"); } else { pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); } } return ctrl; } /* * Looks up an user name in a database and checks the password * * return values: * 1 = User not found * 0 = OK * -1 = Password incorrect * -2 = System error */ static int user_lookup (pam_handle_t *pamh, const char *database, const char *cryptmode, const char *user, const char *pass, int ctrl) { DBM *dbm; datum key, data; /* Open the DB file. */ dbm = dbm_open(database, O_RDONLY, 0644); if (dbm == NULL) { pam_syslog(pamh, LOG_ERR, "user_lookup: could not open database `%s': %m", database); return -2; } /* dump out the database contents for debugging */ if (ctrl & PAM_DUMP_ARG) { pam_syslog(pamh, LOG_INFO, "Database dump:"); for (key = dbm_firstkey(dbm); key.dptr != NULL; key = dbm_nextkey(dbm)) { data = dbm_fetch(dbm, key); pam_syslog(pamh, LOG_INFO, "key[len=%d] = `%s', data[len=%d] = `%s'", key.dsize, key.dptr, data.dsize, data.dptr); } } /* do some more init work */ memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); if (ctrl & PAM_KEY_ONLY_ARG) { if (asprintf(&key.dptr, "%s-%s", user, pass) < 0) key.dptr = NULL; else key.dsize = strlen(key.dptr); } else { key.dptr = x_strdup(user); key.dsize = strlen(user); } if (key.dptr) { data = dbm_fetch(dbm, key); memset(key.dptr, 0, key.dsize); free(key.dptr); } if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_INFO, "password in database is [%p]`%.*s', len is %d", data.dptr, data.dsize, (char *) data.dptr, data.dsize); } if (data.dptr != NULL) { int compare = 0; if (ctrl & PAM_KEY_ONLY_ARG) { dbm_close (dbm); return 0; /* found it, data contents don't matter */ } if (cryptmode && strncasecmp(cryptmode, "crypt", 5) == 0) { /* crypt(3) password storage */ char *cryptpw; if (data.dsize < 13) { compare = -2; } else if (ctrl & PAM_ICASE_ARG) { compare = -2; } else { cryptpw = crypt (pass, data.dptr); if (cryptpw) { compare = strncasecmp (data.dptr, cryptpw, data.dsize); } else { compare = -2; if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_INFO, "crypt() returned NULL"); } }; }; } else { /* Unknown password encryption method - * default to plaintext password storage */ if (strlen(pass) != (size_t)data.dsize) { compare = 1; /* wrong password len -> wrong password */ } else if (ctrl & PAM_ICASE_ARG) { compare = strncasecmp(data.dptr, pass, data.dsize); } else { compare = strncmp(data.dptr, pass, data.dsize); } if (cryptmode && strncasecmp(cryptmode, "none", 4) && (ctrl & PAM_DEBUG_ARG)) { pam_syslog(pamh, LOG_INFO, "invalid value for crypt parameter: %s", cryptmode); pam_syslog(pamh, LOG_INFO, "defaulting to plaintext password mode"); } } dbm_close(dbm); if (compare == 0) return 0; /* match */ else return -1; /* wrong */ } else { int saw_user = 0; if (ctrl & PAM_DEBUG_ARG) { pam_syslog(pamh, LOG_INFO, "error returned by dbm_fetch: %m"); } /* probably we should check dbm_error() here */ if ((ctrl & PAM_KEY_ONLY_ARG) == 0) { dbm_close(dbm); return 1; /* not key_only, so no entry => no entry for the user */ } /* now handle the key_only case */ for (key = dbm_firstkey(dbm); key.dptr != NULL; key = dbm_nextkey(dbm)) { int compare; /* first compare the user portion (case sensitive) */ compare = strncmp(key.dptr, user, strlen(user)); if (compare == 0) { /* assume failure */ compare = -1; /* if we have the divider where we expect it to be... */ if (key.dptr[strlen(user)] == '-') { saw_user = 1; if ((size_t)key.dsize == strlen(user) + 1 + strlen(pass)) { if (ctrl & PAM_ICASE_ARG) { /* compare the password portion (case insensitive)*/ compare = strncasecmp(key.dptr + strlen(user) + 1, pass, strlen(pass)); } else { /* compare the password portion (case sensitive) */ compare = strncmp(key.dptr + strlen(user) + 1, pass, strlen(pass)); } } } if (compare == 0) { dbm_close(dbm); return 0; /* match */ } } } dbm_close(dbm); if (saw_user) return -1; /* saw the user, but password mismatch */ else return 1; /* not found */ } /* NOT REACHED */ return -2; } /* --- authentication management functions (only) --- */ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { const char *username; const void *password; const char *database = NULL; const char *cryptmode = NULL; int retval = PAM_AUTH_ERR, ctrl; /* parse arguments */ ctrl = _pam_parse(pamh, argc, argv, &database, &cryptmode); if (database == NULL) { pam_syslog(pamh, LOG_ERR, "can not get the database name"); return PAM_SERVICE_ERR; } /* Get the username */ retval = pam_get_user(pamh, &username, NULL); if ((retval != PAM_SUCCESS) || (!username)) { pam_syslog(pamh, LOG_ERR, "can not get the username"); return PAM_SERVICE_ERR; } if ((ctrl & PAM_USE_FPASS_ARG) == 0 && (ctrl & PAM_TRY_FPASS_ARG) == 0) { /* Converse to obtain a password */ retval = obtain_authtok(pamh); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "can not obtain password from user"); return retval; } } /* Check if we got a password */ retval = pam_get_item(pamh, PAM_AUTHTOK, &password); if (retval != PAM_SUCCESS || password == NULL) { if ((ctrl & PAM_TRY_FPASS_ARG) != 0) { /* Converse to obtain a password */ retval = obtain_authtok(pamh); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "can not obtain password from user"); return retval; } retval = pam_get_item(pamh, PAM_AUTHTOK, &password); } if (retval != PAM_SUCCESS || password == NULL) { pam_syslog(pamh, LOG_ERR, "can not recover user password"); return PAM_AUTHTOK_RECOVERY_ERR; } } if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_INFO, "Verify user `%s' with a password", username); /* Now use the username to look up password in the database file */ retval = user_lookup(pamh, database, cryptmode, username, password, ctrl); switch (retval) { case -2: /* some sort of system error. The log was already printed */ return PAM_SERVICE_ERR; case -1: /* incorrect password */ pam_syslog(pamh, LOG_WARNING, "user `%s' denied access (incorrect password)", username); return PAM_AUTH_ERR; case 1: /* the user does not exist in the database */ if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_NOTICE, "user `%s' not found in the database", username); return PAM_USER_UNKNOWN; case 0: /* Otherwise, the authentication looked good */ pam_syslog(pamh, LOG_NOTICE, "user '%s' granted access", username); return PAM_SUCCESS; default: /* we don't know anything about this return value */ pam_syslog(pamh, LOG_ERR, "internal module error (retval = %d, user = `%s'", retval, username); return PAM_SERVICE_ERR; } /* should not be reached */ return PAM_IGNORE; } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { const char *username; const char *database = NULL; const char *cryptmode = NULL; int retval = PAM_AUTH_ERR, ctrl; /* parse arguments */ ctrl = _pam_parse(pamh, argc, argv, &database, &cryptmode); /* Get the username */ retval = pam_get_user(pamh, &username, NULL); if ((retval != PAM_SUCCESS) || (!username)) { pam_syslog(pamh, LOG_ERR,"can not get the username"); return PAM_SERVICE_ERR; } /* Now use the username to look up password in the database file */ retval = user_lookup(pamh, database, cryptmode, username, "", ctrl); switch (retval) { case -2: /* some sort of system error. The log was already printed */ return PAM_SERVICE_ERR; case -1: /* incorrect password, but we don't care */ /* FALL THROUGH */ case 0: /* authentication succeeded. dumbest password ever. */ return PAM_SUCCESS; case 1: /* the user does not exist in the database */ return PAM_USER_UNKNOWN; default: /* we don't know anything about this return value */ pam_syslog(pamh, LOG_ERR, "internal module error (retval = %d, user = `%s'", retval, username); return PAM_SERVICE_ERR; } return PAM_SUCCESS; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_userdb_modstruct = { "pam_userdb", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, NULL, NULL, NULL, }; #endif /* * Copyright (c) Cristian Gafton , 1999 * 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, 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. */ Linux-PAM-1.1.8/modules/pam_userdb/create.pl0000644000000000000000000000064112160065211015506 00000000000000#!/usr/bin/perl # this program creates a database in ARGV[1] from pairs given on # stdandard input # # $Id$ use DB_File; my $database = $ARGV[0]; die "Use: create.pl \n" unless ($database); print "Using database: $database\n"; my %lusers = (); tie %lusers, 'DB_File', $database, O_RDWR|O_CREAT, 0644, $DB_HASH ; while () { my ($user, $pass) = split; $lusers{$user} = $pass; } untie %lusers; Linux-PAM-1.1.8/modules/pam_userdb/Makefile.am0000644000000000000000000000154712160065211015750 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(XMLS) pam_userdb.8 create.pl tst-pam_userdb if HAVE_LIBDB man_MANS = pam_userdb.8 TESTS = tst-pam_userdb endif XMLS = README.xml pam_userdb.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module @LIBDB@ @LIBCRYPT@ if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif if HAVE_LIBDB securelib_LTLIBRARIES = pam_userdb.la pam_userdb_la_LIBADD = $(top_builddir)/libpam/libpam.la endif noinst_HEADERS = pam_userdb.h if ENABLE_REGENERATE_MAN noinst_DATA = README pam_userdb.8 README: pam_userdb.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_userdb/README0000644000000000000000000000513112216527615014602 00000000000000pam_userdb — PAM module to authenticate against a db database ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_userdb module is used to verify a username/password pair against values stored in a Berkeley DB database. The database is indexed by the username, and the data fields corresponding to the username keys are the passwords. OPTIONS crypt=[crypt|none] Indicates whether encrypted or plaintext passwords are stored in the database. If it is crypt, passwords should be stored in the database in crypt(3) form. If none is selected, passwords should be stored in the database as plaintext. db=/path/database Use the /path/database database for performing lookup. There is no default; the module will return PAM_IGNORE if no database is provided. debug Print debug information. dump Dump all the entries in the database to the log. Don't do this by default! icase Make the password verification to be case insensitive (ie when working with registration numbers and such). Only works with plaintext password storage. try_first_pass Use the authentication token previously obtained by another module that did the conversation with the application. If this token can not be obtained then the module will try to converse. This option can be used for stacking different modules that need to deal with the authentication tokens. use_first_pass Use the authentication token previously obtained by another module that did the conversation with the application. If this token can not be obtained then the module will fail. This option can be used for stacking different modules that need to deal with the authentication tokens. unknown_ok Do not return error when checking for a user that is not in the database. This can be used to stack more than one pam_userdb module that will check a username/password pair in more than a database. key_only The username and password are concatenated together in the database hash as 'username-password' with a random value. if the concatenation of the username and password with a dash in the middle returns any result, the user is valid. this is useful in cases where the username may not be unique but the username and password pair are. EXAMPLES auth sufficient pam_userdb.so icase db=/etc/dbtest.db AUTHOR pam_userdb was written by Cristian Gafton >gafton@redhat.com<. Linux-PAM-1.1.8/modules/pam_userdb/pam_userdb.h0000644000000000000000000000466212160065211016207 00000000000000 #ifndef _PAM_USERSDB_H #define _PAM_USERSDB_H /* $Id$ */ /* Header files */ #include /* argument parsing */ #define PAM_DEBUG_ARG 0x0001 #define PAM_ICASE_ARG 0x0002 #define PAM_DUMP_ARG 0x0004 #define PAM_UNKNOWN_OK_ARG 0x0010 #define PAM_KEY_ONLY_ARG 0x0020 #define PAM_USE_FPASS_ARG 0x0040 #define PAM_TRY_FPASS_ARG 0x0080 /* Useful macros */ #define x_strdup(s) ( (s) ? strdup(s):NULL ) /* The name of the module we are compiling */ #ifndef MODULE_NAME #define MODULE_NAME "pam_userdb" #endif /* MODULE_NAME */ #endif /* _PAM_USERSDB_H */ /* * Copyright (c) Cristian Gafton , 1999 * 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, 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. */ Linux-PAM-1.1.8/modules/pam_userdb/Makefile.in0000644000000000000000000006061712216527540015776 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_userdb DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) @HAVE_LIBDB_TRUE@pam_userdb_la_DEPENDENCIES = \ @HAVE_LIBDB_TRUE@ $(top_builddir)/libpam/libpam.la pam_userdb_la_SOURCES = pam_userdb.c pam_userdb_la_OBJECTS = pam_userdb.lo @HAVE_LIBDB_TRUE@am_pam_userdb_la_rpath = -rpath $(securelibdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_userdb.c DIST_SOURCES = pam_userdb.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(XMLS) pam_userdb.8 create.pl tst-pam_userdb @HAVE_LIBDB_TRUE@man_MANS = pam_userdb.8 @HAVE_LIBDB_TRUE@TESTS = tst-pam_userdb XMLS = README.xml pam_userdb.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module @LIBDB@ @LIBCRYPT@ \ $(am__append_1) @HAVE_LIBDB_TRUE@securelib_LTLIBRARIES = pam_userdb.la @HAVE_LIBDB_TRUE@pam_userdb_la_LIBADD = $(top_builddir)/libpam/libpam.la noinst_HEADERS = pam_userdb.h @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README pam_userdb.8 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_userdb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_userdb/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_userdb.la: $(pam_userdb_la_OBJECTS) $(pam_userdb_la_DEPENDENCIES) $(LINK) $(am_pam_userdb_la_rpath) $(pam_userdb_la_OBJECTS) $(pam_userdb_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_userdb.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_userdb.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_userdb/README.xml0000644000000000000000000000221512160065211015364 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_userdb.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_userdb-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_filter/0000755000000000000000000000000012216542311013771 500000000000000Linux-PAM-1.1.8/modules/pam_filter/upperLOWER/0000755000000000000000000000000012216542311015735 500000000000000Linux-PAM-1.1.8/modules/pam_filter/upperLOWER/upperLOWER.c0000644000000000000000000000712512160065211017767 00000000000000/* * This is a sample filter program, for use with pam_filter (a module * provided with Linux-PAM). This filter simply transposes upper and * lower case letters, it is intended for demonstration purposes and * it serves no purpose other than to annoy the user... */ #include "config.h" #include #include #include #include #include #include #include #include "pam_filter.h" #include /* ---------------------------------------------------------------- */ static void do_transpose(char *buffer,int len) { int i; for (i=0; i %s\r\n",environ[i]); } fprintf(stderr,"]: end\r\n"); } #endif if (argc != 1) { #ifdef DEBUG fprintf(stderr,"filter invoked as conventional executable\n"); #else syslog(LOG_ERR, "filter invoked as conventional executable"); #endif exit(1); } before_user = before_app = do_transpose; /* assign filter functions */ /* enter a loop that deals with the input and output of the user.. passing it to and from the application */ FD_ZERO(&readers); /* initialize reading mask */ for (;;) { FD_SET(APPOUT_FILENO, &readers); /* wake for output */ FD_SET(APPERR_FILENO, &readers); /* wake for error */ FD_SET(STDIN_FILENO, &readers); /* wake for input */ if ( select(APPTOP_FILE,&readers,NULL,NULL,NULL) < 0 ) { #ifdef DEBUG fprintf(stderr,"select failed\n"); #else syslog(LOG_WARNING,"select failed"); #endif break; } /* application errors */ if ( FD_ISSET(APPERR_FILENO,&readers) ) { int got = read(APPERR_FILENO, buffer, BUFSIZ); if (got <= 0) { break; } else { /* translate to give to real terminal */ if (before_user != NULL) before_user(buffer, got); if (pam_modutil_write(STDERR_FILENO, buffer, got) != got ) { syslog(LOG_WARNING,"couldn't write %d bytes?!",got); break; } } } else if ( FD_ISSET(APPOUT_FILENO,&readers) ) { /* app output */ int got = read(APPOUT_FILENO, buffer, BUFSIZ); if (got <= 0) { break; } else { /* translate to give to real terminal */ if (before_user != NULL) before_user(buffer, got); if (pam_modutil_write(STDOUT_FILENO, buffer, got) != got ) { syslog(LOG_WARNING,"couldn't write %d bytes!?",got); break; } } } if ( FD_ISSET(STDIN_FILENO, &readers) ) { /* user input */ int got = read(STDIN_FILENO, buffer, BUFSIZ); if (got < 0) { syslog(LOG_WARNING,"user input junked"); break; } else if (got) { /* translate to give to application */ if (before_app != NULL) before_app(buffer, got); if (pam_modutil_write(APPIN_FILENO, buffer, got) != got ) { syslog(LOG_WARNING,"couldn't pass %d bytes!?",got); break; } } else { /* nothing received -- an error? */ syslog(LOG_WARNING,"user input null?"); break; } } } exit(0); } Linux-PAM-1.1.8/modules/pam_filter/upperLOWER/Makefile.am0000644000000000000000000000051612160065211017710 00000000000000# # Copyright (c) 2005 Thorsten Kukuk # CLEANFILES = *~ securelibfilterdir = $(SECUREDIR)/pam_filter AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -I$(srcdir)/.. @PIE_CFLAGS@ AM_LDFLAGS = @PIE_LDFLAGS@ LDADD = $(top_builddir)/libpam/libpam.la securelibfilter_PROGRAMS = upperLOWER Linux-PAM-1.1.8/modules/pam_filter/upperLOWER/Makefile.in0000644000000000000000000004417012216527536017744 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ securelibfilter_PROGRAMS = upperLOWER$(EXEEXT) subdir = modules/pam_filter/upperLOWER DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(securelibfilterdir)" PROGRAMS = $(securelibfilter_PROGRAMS) upperLOWER_SOURCES = upperLOWER.c upperLOWER_OBJECTS = upperLOWER.$(OBJEXT) upperLOWER_LDADD = $(LDADD) upperLOWER_DEPENDENCIES = $(top_builddir)/libpam/libpam.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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 = upperLOWER.c DIST_SOURCES = upperLOWER.c ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ securelibfilterdir = $(SECUREDIR)/pam_filter AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -I$(srcdir)/.. @PIE_CFLAGS@ AM_LDFLAGS = @PIE_LDFLAGS@ LDADD = $(top_builddir)/libpam/libpam.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_filter/upperLOWER/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_filter/upperLOWER/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibfilterPROGRAMS: $(securelibfilter_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(securelibfilterdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibfilterdir)" @list='$(securelibfilter_PROGRAMS)'; test -n "$(securelibfilterdir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(securelibfilterdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(securelibfilterdir)$$dir" || exit $$?; \ } \ ; done uninstall-securelibfilterPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(securelibfilter_PROGRAMS)'; test -n "$(securelibfilterdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(securelibfilterdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(securelibfilterdir)" && rm -f $$files clean-securelibfilterPROGRAMS: @list='$(securelibfilter_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list upperLOWER$(EXEEXT): $(upperLOWER_OBJECTS) $(upperLOWER_DEPENDENCIES) @rm -f upperLOWER$(EXEEXT) $(LINK) $(upperLOWER_OBJECTS) $(upperLOWER_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/upperLOWER.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(securelibfilterdir)"; 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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-securelibfilterPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-securelibfilterPROGRAMS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -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-securelibfilterPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-securelibfilterPROGRAMS 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-securelibfilterPROGRAMS 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-securelibfilterPROGRAMS # 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: Linux-PAM-1.1.8/modules/pam_filter/Makefile.am0000644000000000000000000000144212160065211015743 00000000000000# # Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk # SUBDIRS = upperLOWER CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_filter man_MANS = pam_filter.8 XMLS = README.xml pam_filter.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif include_HEADERS=pam_filter.h pam_filter_la_LIBADD = $(top_builddir)/libpam/libpam.la securelib_LTLIBRARIES = pam_filter.la TESTS = tst-pam_filter if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_filter.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_filter/README0000644000000000000000000000603312216527575014612 00000000000000pam_filter — PAM filter module ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION This module is intended to be a platform for providing access to all of the input/output that passes between the user and the application. It is only suitable for tty-based and (stdin/stdout) applications. To function this module requires filters to be installed on the system. The single filter provided with the module simply transposes upper and lower case letters in the input and output streams. (This can be very annoying and is not kind to termcap based editors). Each component of the module has the potential to invoke the desired filter. The filter is always execv(2) with the privilege of the calling application and not that of the user. For this reason it cannot usually be killed by the user without closing their session. OPTIONS debug Print debug information. new_term The default action of the filter is to set the PAM_TTY item to indicate the terminal that the user is using to connect to the application. This argument indicates that the filter should set PAM_TTY to the filtered pseudo-terminal. non_term don't try to set the PAM_TTY item. runX In order that the module can invoke a filter it should know when to invoke it. This argument is required to tell the filter when to do this. Permitted values for X are 1 and 2. These indicate the precise time that the filter is to be run. To understand this concept it will be useful to have read the pam(3) manual page. Basically, for each management group there are up to two ways of calling the module's functions. In the case of the authentication and session components there are actually two separate functions. For the case of authentication, these functions are pam_authenticate(3) and pam_setcred(3), here run1 means run the filter from the pam_authenticate function and run2 means run the filter from pam_setcred. In the case of the session modules, run1 implies that the filter is invoked at the pam_open_session(3) stage, and run2 for pam_close_session(3). For the case of the account component. Either run1 or run2 may be used. For the case of the password component, run1 is used to indicate that the filter is run on the first occasion of pam_chauthtok(3) (the PAM_PRELIM_CHECK phase) and run2 is used to indicate that the filter is run on the second occasion (the PAM_UPDATE_AUTHTOK phase). filter The full pathname of the filter to be run and any command line arguments that the filter might expect. EXAMPLES Add the following line to /etc/pam.d/login to see how to configure login to transpose upper and lower case letters once the user has logged in: session required pam_filter.so run1 /lib/security/pam_filter/upperLOWER AUTHOR pam_filter was written by Andrew G. Morgan . Linux-PAM-1.1.8/modules/pam_filter/pam_filter.c0000644000000000000000000004320512160065211016200 00000000000000/* * $Id$ * * written by Andrew Morgan with much help from * Richard Stevens' UNIX Network Programming book. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #define PAM_SM_SESSION #define PAM_SM_PASSWORD #include #include #include "pam_filter.h" /* ------ some tokens used for convenience throughout this file ------- */ #define FILTER_DEBUG 01 #define FILTER_RUN1 02 #define FILTER_RUN2 04 #define NEW_TERM 010 #define NON_TERM 020 /* -------------------------------------------------------------------- */ /* log errors */ #include #define DEV_PTMX "/dev/ptmx" static int master (void) { int fd; if ((fd = open(DEV_PTMX, O_RDWR)) >= 0) { return fd; } return -1; } static int process_args(pam_handle_t *pamh , int argc, const char **argv, const char *type , char ***evp, const char **filtername) { int ctrl=0; while (argc-- > 0) { if (strcmp("debug",*argv) == 0) { ctrl |= FILTER_DEBUG; } else if (strcmp("new_term",*argv) == 0) { ctrl |= NEW_TERM; } else if (strcmp("non_term",*argv) == 0) { ctrl |= NON_TERM; } else if (strcmp("run1",*argv) == 0) { ctrl |= FILTER_RUN1; if (argc <= 0) { pam_syslog(pamh, LOG_ALERT, "no run filter supplied"); } else break; } else if (strcmp("run2",*argv) == 0) { ctrl |= FILTER_RUN2; if (argc <= 0) { pam_syslog(pamh, LOG_ALERT, "no run filter supplied"); } else break; } else { pam_syslog(pamh, LOG_ERR, "unrecognized option: %s", *argv); } ++argv; /* step along list */ } if (argc < 0) { /* there was no reference to a filter */ *filtername = NULL; *evp = NULL; } else { char **levp; const char *user = NULL; const void *tmp; int i,size, retval; *filtername = *++argv; if (ctrl & FILTER_DEBUG) { pam_syslog(pamh, LOG_DEBUG, "will run filter %s", *filtername); } levp = (char **) malloc(5*sizeof(char *)); if (levp == NULL) { pam_syslog(pamh, LOG_CRIT, "no memory for environment of filter"); return -1; } for (size=i=0; i terminate */ /* the "SERVICE" variable */ #define SERVICE_OFFSET 8 /* strlen('SERVICE='); */ #define SERVICE_NAME "SERVICE=" retval = pam_get_item(pamh, PAM_SERVICE, &tmp); if (retval != PAM_SUCCESS || tmp == NULL) { pam_syslog(pamh, LOG_CRIT, "service name not found"); if (levp) { free(levp[0]); free(levp); } return -1; } size = SERVICE_OFFSET+strlen(tmp); levp[1] = (char *) malloc(size+1); if (levp[1] == NULL) { pam_syslog(pamh, LOG_CRIT, "no memory for service name"); if (levp) { free(levp[0]); free(levp); } return -1; } strncpy(levp[1],SERVICE_NAME,SERVICE_OFFSET); strcpy(levp[1]+SERVICE_OFFSET, tmp); levp[1][size] = '\0'; /* terminate */ /* the "USER" variable */ #define USER_OFFSET 5 /* strlen('USER='); */ #define USER_NAME "USER=" if (pam_get_user(pamh, &user, NULL) != PAM_SUCCESS || user == NULL) { user = ""; } size = USER_OFFSET+strlen(user); levp[2] = (char *) malloc(size+1); if (levp[2] == NULL) { pam_syslog(pamh, LOG_CRIT, "no memory for user's name"); if (levp) { free(levp[1]); free(levp[0]); free(levp); } return -1; } strncpy(levp[2],USER_NAME,USER_OFFSET); strcpy(levp[2]+USER_OFFSET, user); levp[2][size] = '\0'; /* terminate */ /* the "USER" variable */ #define TYPE_OFFSET 5 /* strlen('TYPE='); */ #define TYPE_NAME "TYPE=" size = TYPE_OFFSET+strlen(type); levp[3] = (char *) malloc(size+1); if (levp[3] == NULL) { pam_syslog(pamh, LOG_CRIT, "no memory for type"); if (levp) { free(levp[2]); free(levp[1]); free(levp[0]); free(levp); } return -1; } strncpy(levp[3],TYPE_NAME,TYPE_OFFSET); strcpy(levp[3]+TYPE_OFFSET, type); levp[3][size] = '\0'; /* terminate */ levp[4] = NULL; /* end list */ *evp = levp; } if ((ctrl & FILTER_DEBUG) && *filtername) { char **e; pam_syslog(pamh, LOG_DEBUG, "filter[%s]: %s", type, *filtername); pam_syslog(pamh, LOG_DEBUG, "environment:"); for (e=*evp; e && *e; ++e) { pam_syslog(pamh, LOG_DEBUG, " %s", *e); } } return ctrl; } static void free_evp(char *evp[]) { int i; if (evp) for (i=0; i<4; ++i) { if (evp[i]) free(evp[i]); } free(evp); } static int set_filter (pam_handle_t *pamh, int flags UNUSED, int ctrl, const char **evp, const char *filtername) { int status=-1; char* terminal = NULL; struct termios stored_mode; /* initial terminal mode settings */ int fd[2], child=0, child2=0, aterminal; if (filtername == NULL || *filtername != '/') { pam_syslog(pamh, LOG_ALERT, "filtername not permitted; full pathname required"); return PAM_ABORT; } if (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO)) { aterminal = 0; } else { aterminal = 1; } if (aterminal) { /* open the master pseudo terminal */ fd[0] = master(); if (fd[0] < 0) { pam_syslog(pamh, LOG_CRIT, "no master terminal"); return PAM_AUTH_ERR; } /* set terminal into raw mode.. remember old mode so that we can revert to it after the child has quit. */ /* this is termios terminal handling... */ if ( tcgetattr(STDIN_FILENO, &stored_mode) < 0 ) { pam_syslog(pamh, LOG_CRIT, "couldn't copy terminal mode: %m"); /* in trouble, so close down */ close(fd[0]); return PAM_ABORT; } else { struct termios t_mode = stored_mode; t_mode.c_iflag = 0; /* no input control */ t_mode.c_oflag &= ~OPOST; /* no ouput post processing */ /* no signals, canonical input, echoing, upper/lower output */ #ifdef XCASE t_mode.c_lflag &= ~(XCASE); #endif t_mode.c_lflag &= ~(ISIG|ICANON|ECHO); t_mode.c_cflag &= ~(CSIZE|PARENB); /* no parity */ t_mode.c_cflag |= CS8; /* 8 bit chars */ t_mode.c_cc[VMIN] = 1; /* number of chars to satisfy a read */ t_mode.c_cc[VTIME] = 0; /* 0/10th second for chars */ if ( tcsetattr(STDIN_FILENO, TCSAFLUSH, &t_mode) < 0 ) { pam_syslog(pamh, LOG_WARNING, "couldn't put terminal in RAW mode: %m"); close(fd[0]); return PAM_ABORT; } /* * NOTE: Unlike the stream socket case here the child * opens the slave terminal as fd[1] *after* the fork... */ } } else { /* * not a terminal line so just open a stream socket fd[0-1] * both set... */ if ( socketpair(AF_UNIX, SOCK_STREAM, 0, fd) < 0 ) { pam_syslog(pamh, LOG_CRIT, "couldn't open a stream pipe: %m"); return PAM_ABORT; } } /* start child process */ if ( (child = fork()) < 0 ) { pam_syslog(pamh, LOG_WARNING, "first fork failed: %m"); if (aterminal) { (void) tcsetattr(STDIN_FILENO, TCSAFLUSH, &stored_mode); } return PAM_AUTH_ERR; } if ( child == 0 ) { /* child process *is* application */ if (aterminal) { /* close the controlling tty */ #if defined(__hpux) && defined(O_NOCTTY) int t = open("/dev/tty", O_RDWR|O_NOCTTY); #else int t = open("/dev/tty",O_RDWR); if (t > 0) { (void) ioctl(t, TIOCNOTTY, NULL); close(t); } #endif /* defined(__hpux) && defined(O_NOCTTY) */ /* make this process it's own process leader */ if (setsid() == -1) { pam_syslog(pamh, LOG_WARNING, "child cannot become new session: %m"); return PAM_ABORT; } /* grant slave terminal */ if (grantpt (fd[0]) < 0) { pam_syslog(pamh, LOG_WARNING, "Cannot grant acccess to slave terminal"); return PAM_ABORT; } /* unlock slave terminal */ if (unlockpt (fd[0]) < 0) { pam_syslog(pamh, LOG_WARNING, "Cannot unlock slave terminal"); return PAM_ABORT; } /* find slave's name */ terminal = ptsname(fd[0]); /* returned value should not be freed */ if (terminal == NULL) { pam_syslog(pamh, LOG_WARNING, "Cannot get the name of the slave terminal: %m"); return PAM_ABORT; } fd[1] = open(terminal, O_RDWR); close(fd[0]); /* process is the child -- uses line fd[1] */ if (fd[1] < 0) { pam_syslog(pamh, LOG_WARNING, "cannot open slave terminal: %s: %m", terminal); return PAM_ABORT; } /* initialize the child's terminal to be the way the parent's was before we set it into RAW mode */ if ( tcsetattr(fd[1], TCSANOW, &stored_mode) < 0 ) { pam_syslog(pamh, LOG_WARNING, "cannot set slave terminal mode: %s: %m", terminal); close(fd[1]); return PAM_ABORT; } } else { /* nothing to do for a simple stream socket */ } /* re-assign the stdin/out to fd[1] <- (talks to filter). */ if ( dup2(fd[1],STDIN_FILENO) != STDIN_FILENO || dup2(fd[1],STDOUT_FILENO) != STDOUT_FILENO || dup2(fd[1],STDERR_FILENO) != STDERR_FILENO ) { pam_syslog(pamh, LOG_WARNING, "unable to re-assign STDIN/OUT/ERR: %m"); close(fd[1]); return PAM_ABORT; } /* make sure that file descriptors survive 'exec's */ if ( fcntl(STDIN_FILENO, F_SETFD, 0) || fcntl(STDOUT_FILENO,F_SETFD, 0) || fcntl(STDERR_FILENO,F_SETFD, 0) ) { pam_syslog(pamh, LOG_WARNING, "unable to re-assign STDIN/OUT/ERR: %m"); return PAM_ABORT; } /* now the user input is read from the parent/filter: forget fd */ close(fd[1]); /* the current process is now aparently working with filtered stdio/stdout/stderr --- success! */ return PAM_SUCCESS; } /* Clear out passwords... there is a security problem here in * that this process never executes pam_end. Consequently, any * other sensitive data in this process is *not* explicitly * overwritten, before the process terminates */ (void) pam_set_item(pamh, PAM_AUTHTOK, NULL); (void) pam_set_item(pamh, PAM_OLDAUTHTOK, NULL); /* fork a copy of process to run the actual filter executable */ if ( (child2 = fork()) < 0 ) { pam_syslog(pamh, LOG_WARNING, "filter fork failed: %m"); child2 = 0; } else if ( child2 == 0 ) { /* exec the child filter */ if ( dup2(fd[0],APPIN_FILENO) != APPIN_FILENO || dup2(fd[0],APPOUT_FILENO) != APPOUT_FILENO || dup2(fd[0],APPERR_FILENO) != APPERR_FILENO ) { pam_syslog(pamh, LOG_WARNING, "unable to re-assign APPIN/OUT/ERR: %m"); close(fd[0]); _exit(1); } /* make sure that file descriptors survive 'exec's */ if ( fcntl(APPIN_FILENO, F_SETFD, 0) == -1 || fcntl(APPOUT_FILENO,F_SETFD, 0) == -1 || fcntl(APPERR_FILENO,F_SETFD, 0) == -1 ) { pam_syslog(pamh, LOG_WARNING, "unable to retain APPIN/OUT/ERR: %m"); close(APPIN_FILENO); close(APPOUT_FILENO); close(APPERR_FILENO); _exit(1); } /* now the user input is read from the parent through filter */ execle(filtername, "", NULL, evp); /* getting to here is an error */ pam_syslog(pamh, LOG_ALERT, "filter: %s: %m", filtername); _exit(1); } else { /* wait for either of the two children to exit */ while (child && child2) { /* loop if there are two children */ int lstatus=0; int chid; chid = wait(&lstatus); if (chid == child) { if (WIFEXITED(lstatus)) { /* exited ? */ status = WEXITSTATUS(lstatus); } else if (WIFSIGNALED(lstatus)) { /* killed ? */ status = -1; } else continue; /* just stopped etc.. */ child = 0; /* the child has exited */ } else if (chid == child2) { /* * if the filter has exited. Let the child die * naturally below */ if (WIFEXITED(lstatus) || WIFSIGNALED(lstatus)) child2 = 0; } else { pam_syslog(pamh, LOG_ALERT, "programming error " "in file %s at line %d", chid, lstatus, __FILE__, __LINE__); child = child2 = 0; status = -1; } } } close(fd[0]); /* if there is something running, wait for it to exit */ while (child || child2) { int lstatus=0; int chid; chid = wait(&lstatus); if (child && chid == child) { if (WIFEXITED(lstatus)) { /* exited ? */ status = WEXITSTATUS(lstatus); } else if (WIFSIGNALED(lstatus)) { /* killed ? */ status = -1; } else continue; /* just stopped etc.. */ child = 0; /* the child has exited */ } else if (child2 && chid == child2) { if (WIFEXITED(lstatus) || WIFSIGNALED(lstatus)) child2 = 0; } else { pam_syslog(pamh, LOG_ALERT, "programming error " "in file %s at line %d", chid, lstatus, __FILE__, __LINE__); child = child2 = 0; status = -1; } } if (aterminal) { /* reset to initial terminal mode */ (void) tcsetattr(STDIN_FILENO, TCSANOW, &stored_mode); } if (ctrl & FILTER_DEBUG) { pam_syslog(pamh, LOG_DEBUG, "parent process exited"); /* clock off */ } /* quit the parent process, returning the child's exit status */ exit(status); return status; /* never reached, to make gcc happy */ } static int set_the_terminal(pam_handle_t *pamh) { const void *tty; if (pam_get_item(pamh, PAM_TTY, &tty) != PAM_SUCCESS || tty == NULL) { tty = ttyname(STDIN_FILENO); if (tty == NULL) { pam_syslog(pamh, LOG_ERR, "couldn't get the tty name"); return PAM_ABORT; } if (pam_set_item(pamh, PAM_TTY, tty) != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "couldn't set tty name"); return PAM_ABORT; } } return PAM_SUCCESS; } static int need_a_filter(pam_handle_t *pamh , int flags, int argc, const char **argv , const char *name, int which_run) { int ctrl; char **evp; const char *filterfile; int retval; ctrl = process_args(pamh, argc, argv, name, &evp, &filterfile); if (ctrl == -1) { return PAM_AUTHINFO_UNAVAIL; } /* set the tty to the old or the new one? */ if (!(ctrl & NON_TERM) && !(ctrl & NEW_TERM)) { retval = set_the_terminal(pamh); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "tried and failed to set PAM_TTY"); } } else { retval = PAM_SUCCESS; /* nothing to do which is always a success */ } if (retval == PAM_SUCCESS && (ctrl & which_run)) { retval = set_filter(pamh, flags, ctrl , (const char **)evp, filterfile); } if (retval == PAM_SUCCESS && !(ctrl & NON_TERM) && (ctrl & NEW_TERM)) { retval = set_the_terminal(pamh); if (retval != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "tried and failed to set new terminal as PAM_TTY"); } } free_evp(evp); if (ctrl & FILTER_DEBUG) { pam_syslog(pamh, LOG_DEBUG, "filter/%s, returning %d", name, retval); pam_syslog(pamh, LOG_DEBUG, "[%s]", pam_strerror(pamh, retval)); } return retval; } /* ----------------- public functions ---------------- */ /* * here are the advertised access points ... */ /* ------------------ authentication ----------------- */ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh , int flags, int argc, const char **argv) { return need_a_filter(pamh, flags, argc, argv , "authenticate", FILTER_RUN1); } PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags , int argc, const char **argv) { return need_a_filter(pamh, flags, argc, argv, "setcred", FILTER_RUN2); } /* --------------- account management ---------------- */ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) { return need_a_filter(pamh, flags, argc, argv , "setcred", FILTER_RUN1|FILTER_RUN2 ); } /* --------------- session management ---------------- */ PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags , int argc, const char **argv) { return need_a_filter(pamh, flags, argc, argv , "open_session", FILTER_RUN1); } PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags , int argc, const char **argv) { return need_a_filter(pamh, flags, argc, argv , "close_session", FILTER_RUN2); } /* --------- updating authentication tokens --------- */ PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags , int argc, const char **argv) { int runN; if (flags & PAM_PRELIM_CHECK) runN = FILTER_RUN1; else if (flags & PAM_UPDATE_AUTHTOK) runN = FILTER_RUN2; else { pam_syslog(pamh, LOG_ERR, "unknown flags for chauthtok (0x%X)", flags); return PAM_TRY_AGAIN; } return need_a_filter(pamh, flags, argc, argv, "chauthtok", runN); } #ifdef PAM_STATIC /* ------------ stuff for static modules ------------ */ struct pam_module _pam_filter_modstruct = { "pam_filter", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, pam_sm_chauthtok, }; #endif Linux-PAM-1.1.8/modules/pam_filter/tst-pam_filter0000755000000000000000000000006512160065211016567 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_filter.so Linux-PAM-1.1.8/modules/pam_filter/pam_filter.80000644000000000000000000001146612216527575016153 00000000000000'\" t .\" Title: pam_filter .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_FILTER" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_filter \- PAM filter module .SH "SYNOPSIS" .HP \w'\fBpam_filter\&.so\fR\ 'u \fBpam_filter\&.so\fR [debug] [new_term] [non_term] run1|run2 \fIfilter\fR [\fI\&.\&.\&.\fR] .SH "DESCRIPTION" .PP This module is intended to be a platform for providing access to all of the input/output that passes between the user and the application\&. It is only suitable for tty\-based and (stdin/stdout) applications\&. .PP To function this module requires \fIfilters\fR to be installed on the system\&. The single filter provided with the module simply transposes upper and lower case letters in the input and output streams\&. (This can be very annoying and is not kind to termcap based editors)\&. .PP Each component of the module has the potential to invoke the desired filter\&. The filter is always \fBexecv\fR(2) with the privilege of the calling application and \fInot\fR that of the user\&. For this reason it cannot usually be killed by the user without closing their session\&. .SH "OPTIONS" .PP .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBnew_term\fR .RS 4 The default action of the filter is to set the \fIPAM_TTY\fR item to indicate the terminal that the user is using to connect to the application\&. This argument indicates that the filter should set \fIPAM_TTY\fR to the filtered pseudo\-terminal\&. .RE .PP \fBnon_term\fR .RS 4 don\*(Aqt try to set the \fIPAM_TTY\fR item\&. .RE .PP \fBrunX\fR .RS 4 In order that the module can invoke a filter it should know when to invoke it\&. This argument is required to tell the filter when to do this\&. .sp Permitted values for \fIX\fR are \fI1\fR and \fI2\fR\&. These indicate the precise time that the filter is to be run\&. To understand this concept it will be useful to have read the \fBpam\fR(3) manual page\&. Basically, for each management group there are up to two ways of calling the module\*(Aqs functions\&. In the case of the \fIauthentication\fR and \fIsession\fR components there are actually two separate functions\&. For the case of authentication, these functions are \fBpam_authenticate\fR(3) and \fBpam_setcred\fR(3), here \fBrun1\fR means run the filter from the \fBpam_authenticate\fR function and \fBrun2\fR means run the filter from \fBpam_setcred\fR\&. In the case of the session modules, \fIrun1\fR implies that the filter is invoked at the \fBpam_open_session\fR(3) stage, and \fIrun2\fR for \fBpam_close_session\fR(3)\&. .sp For the case of the account component\&. Either \fIrun1\fR or \fIrun2\fR may be used\&. .sp For the case of the password component, \fIrun1\fR is used to indicate that the filter is run on the first occasion of \fBpam_chauthtok\fR(3) (the \fIPAM_PRELIM_CHECK\fR phase) and \fIrun2\fR is used to indicate that the filter is run on the second occasion (the \fIPAM_UPDATE_AUTHTOK\fR phase)\&. .RE .PP \fBfilter\fR .RS 4 The full pathname of the filter to be run and any command line arguments that the filter might expect\&. .RE .SH "MODULE TYPES PROVIDED" .PP All module types (\fBauth\fR, \fBaccount\fR, \fBpassword\fR and \fBsession\fR) are provided\&. .SH "RETURN VALUES" .PP .PP PAM_SUCCESS .RS 4 The new filter was set successfully\&. .RE .PP PAM_ABORT .RS 4 Critical error, immediate abort\&. .RE .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/login to see how to configure login to transpose upper and lower case letters once the user has logged in: .sp .if n \{\ .RS 4 .\} .nf session required pam_filter\&.so run1 /lib/security/pam_filter/upperLOWER .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_filter was written by Andrew G\&. Morgan \&. Linux-PAM-1.1.8/modules/pam_filter/Makefile.in0000644000000000000000000007475412216527536016013 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2007, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_filter DIST_COMMON = README $(include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" \ "$(DESTDIR)$(includedir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_filter_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_filter_la_SOURCES = pam_filter.c pam_filter_la_OBJECTS = pam_filter.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_filter.c DIST_SOURCES = pam_filter.c 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 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) HEADERS = $(include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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@ SUBDIRS = upperLOWER CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_filter man_MANS = pam_filter.8 XMLS = README.xml pam_filter.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) include_HEADERS = pam_filter.h pam_filter_la_LIBADD = $(top_builddir)/libpam/libpam.la securelib_LTLIBRARIES = pam_filter.la TESTS = tst-pam_filter @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_filter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_filter/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_filter.la: $(pam_filter_la_OBJECTS) $(pam_filter_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_filter_la_OBJECTS) $(pam_filter_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_filter.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(includedir)" && rm -f $$files # 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): @fail= 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; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= 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; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-includeHEADERS install-man \ install-securelibLTLIBRARIES install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man8 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-includeHEADERS uninstall-man \ uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-TESTS check-am clean clean-generic \ clean-libtool clean-securelibLTLIBRARIES ctags ctags-recursive \ 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-includeHEADERS install-info install-info-am \ install-man install-man8 install-pdf install-pdf-am install-ps \ install-ps-am install-securelibLTLIBRARIES install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-includeHEADERS uninstall-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_filter.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_filter/pam_filter.8.xml0000644000000000000000000002054212160065211016723 00000000000000 pam_filter 8 Linux-PAM Manual pam_filter PAM filter module pam_filter.so debug new_term non_term run1|run2 filter ... DESCRIPTION This module is intended to be a platform for providing access to all of the input/output that passes between the user and the application. It is only suitable for tty-based and (stdin/stdout) applications. To function this module requires filters to be installed on the system. The single filter provided with the module simply transposes upper and lower case letters in the input and output streams. (This can be very annoying and is not kind to termcap based editors). Each component of the module has the potential to invoke the desired filter. The filter is always execv2 with the privilege of the calling application and not that of the user. For this reason it cannot usually be killed by the user without closing their session. OPTIONS Print debug information. The default action of the filter is to set the PAM_TTY item to indicate the terminal that the user is using to connect to the application. This argument indicates that the filter should set PAM_TTY to the filtered pseudo-terminal. don't try to set the PAM_TTY item. In order that the module can invoke a filter it should know when to invoke it. This argument is required to tell the filter when to do this. Permitted values for X are 1 and 2. These indicate the precise time that the filter is to be run. To understand this concept it will be useful to have read the pam3 manual page. Basically, for each management group there are up to two ways of calling the module's functions. In the case of the authentication and session components there are actually two separate functions. For the case of authentication, these functions are pam_authenticate3 and pam_setcred3 , here means run the filter from the pam_authenticate function and means run the filter from pam_setcred. In the case of the session modules, run1 implies that the filter is invoked at the pam_open_session3 stage, and run2 for pam_close_session3 . For the case of the account component. Either run1 or run2 may be used. For the case of the password component, run1 is used to indicate that the filter is run on the first occasion of pam_chauthtok3 (the PAM_PRELIM_CHECK phase) and run2 is used to indicate that the filter is run on the second occasion (the PAM_UPDATE_AUTHTOK phase). The full pathname of the filter to be run and any command line arguments that the filter might expect. MODULE TYPES PROVIDED All module types (, , and ) are provided. RETURN VALUES PAM_SUCCESS The new filter was set successfully. PAM_ABORT Critical error, immediate abort. EXAMPLES Add the following line to /etc/pam.d/login to see how to configure login to transpose upper and lower case letters once the user has logged in: session required pam_filter.so run1 /lib/security/pam_filter/upperLOWER SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_filter was written by Andrew G. Morgan <morgan@kernel.org>. Linux-PAM-1.1.8/modules/pam_filter/README.xml0000644000000000000000000000221512160065211015365 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_filter.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_filter-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_filter/pam_filter.h0000644000000000000000000000210112160065211016173 00000000000000/* * $Id$ * * this file is associated with the Linux-PAM filter module. * it was written by Andrew G. Morgan * */ #ifndef PAM_FILTER_H #define PAM_FILTER_H #include /* * this will fail if there is some problem with these file descriptors * being allocated by the pam_filter Linux-PAM module. The numbers * here are thought safe, but the filter developer should use the * macros, as these numbers are subject to change. * * The APPXXX_FILENO file descriptors are the STDIN/OUT/ERR_FILENO of the * application. The filter uses the STDIN/OUT/ERR_FILENO's to converse * with the user, passes (modified) user input to the application via * APPIN_FILENO, and receives application output from APPOUT_FILENO/ERR. */ #define APPIN_FILENO 3 /* write here to give application input */ #define APPOUT_FILENO 4 /* read here to get application output */ #define APPERR_FILENO 5 /* read here to get application errors */ #define APPTOP_FILE 6 /* used by select */ #endif Linux-PAM-1.1.8/modules/pam_localuser/0000755000000000000000000000000012216542311014475 500000000000000Linux-PAM-1.1.8/modules/pam_localuser/tst-pam_localuser0000755000000000000000000000007012160065211017773 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_localuser.so Linux-PAM-1.1.8/modules/pam_localuser/Makefile.am0000644000000000000000000000137312160065211016452 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_localuser TESTS = tst-pam_localuser man_MANS = pam_localuser.8 XMLS = README.xml pam_localuser.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_localuser.la pam_localuser_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_localuser.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_localuser/pam_localuser.c0000644000000000000000000001133712160065211017411 00000000000000/* * Copyright 2001, 2004 Red Hat, Inc. * * 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. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #define PAM_SM_AUTH #define PAM_SM_ACCOUNT #include #include #include #define MODULE_NAME "pam_localuser" PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int i, ret = PAM_SUCCESS; FILE *fp; int debug = 0; const char *filename = "/etc/passwd"; char line[LINE_MAX], name[LINE_MAX]; const char* user; /* process arguments */ for(i = 0; i < argc; i++) { if(strcmp("debug", argv[i]) == 0) { debug = 1; } } for(i = 0; i < argc; i++) { if(strncmp("file=", argv[i], 5) == 0) { filename = argv[i] + 5; if(debug) { pam_syslog (pamh, LOG_DEBUG, "set filename to \"%s\"", filename); } } } /* open the file */ fp = fopen(filename, "r"); if(fp == NULL) { pam_syslog (pamh, LOG_ERR, "error opening \"%s\": %m", filename); return PAM_SYSTEM_ERR; } if(pam_get_user(pamh, &user, NULL) != PAM_SUCCESS) { pam_syslog (pamh, LOG_ERR, "user name not specified yet"); fclose(fp); return PAM_SYSTEM_ERR; } if ((user == NULL) || (strlen(user) == 0)) { pam_syslog (pamh, LOG_ERR, "user name not valid"); fclose(fp); return PAM_SYSTEM_ERR; } /* scan the file, using fgets() instead of fgetpwent() because i * don't want to mess with applications which call fgetpwent() */ ret = PAM_PERM_DENIED; snprintf(name, sizeof(name), "%s:", user); i = strlen(name); while(fgets(line, sizeof(line), fp) != NULL) { if(debug) { pam_syslog (pamh, LOG_DEBUG, "checking \"%s\"", line); } if(strncmp(name, line, i) == 0) { ret = PAM_SUCCESS; break; } } /* okay, we're done */ fclose(fp); return ret; } PAM_EXTERN int pam_sm_setcred (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_sm_authenticate(pamh, flags, argc, argv); } PAM_EXTERN int pam_sm_open_session (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_sm_authenticate(pamh, flags, argc, argv); } PAM_EXTERN int pam_sm_close_session (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_sm_authenticate(pamh, flags, argc, argv); } PAM_EXTERN int pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv) { return pam_sm_authenticate(pamh, flags, argc, argv); } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_localuser_modstruct = { "pam_localuser", pam_sm_authenticate, pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, pam_sm_chauthtok }; #endif Linux-PAM-1.1.8/modules/pam_localuser/README0000644000000000000000000000221612216527601015303 00000000000000pam_localuser — require users to be listed in /etc/passwd ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_localuser is a PAM module to help implementing site-wide login policies, where they typically include a subset of the network's users and a few accounts that are local to a particular workstation. Using pam_localuser and pam_wheel or pam_listfile is an effective way to restrict access to either local users and/or a subset of the network's users. This could also be implemented using pam_listfile.so and a very short awk script invoked by cron, but it's common enough to have been separated out. OPTIONS debug Print debug information. file=/path/passwd Use a file other than /etc/passwd. EXAMPLES Add the following line to /etc/pam.d/su to allow only local users in group wheel to use su. account sufficient pam_localuser.so account required pam_wheel.so AUTHOR pam_localuser was written by Nalin Dahyabhai . Linux-PAM-1.1.8/modules/pam_localuser/Makefile.in0000644000000000000000000006022612216527536016504 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_localuser DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_localuser_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_localuser_la_SOURCES = pam_localuser.c pam_localuser_la_OBJECTS = pam_localuser.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_localuser.c DIST_SOURCES = pam_localuser.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_localuser TESTS = tst-pam_localuser man_MANS = pam_localuser.8 XMLS = README.xml pam_localuser.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_localuser.la pam_localuser_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_localuser/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_localuser/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_localuser.la: $(pam_localuser_la_OBJECTS) $(pam_localuser_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_localuser_la_OBJECTS) $(pam_localuser_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_localuser.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_localuser.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_localuser/pam_localuser.8.xml0000644000000000000000000001063112160065211020131 00000000000000 pam_localuser 8 Linux-PAM Manual pam_localuser require users to be listed in /etc/passwd pam_localuser.so debug file=/path/passwd DESCRIPTION pam_localuser is a PAM module to help implementing site-wide login policies, where they typically include a subset of the network's users and a few accounts that are local to a particular workstation. Using pam_localuser and pam_wheel or pam_listfile is an effective way to restrict access to either local users and/or a subset of the network's users. This could also be implemented using pam_listfile.so and a very short awk script invoked by cron, but it's common enough to have been separated out. OPTIONS Print debug information. Use a file other than /etc/passwd. MODULE TYPES PROVIDED All module types (, , and ) are provided. RETURN VALUES PAM_SUCCESS The new localuser was set successfully. PAM_SERVICE_ERR No username was given. PAM_USER_UNKNOWN User not known. EXAMPLES Add the following line to /etc/pam.d/su to allow only local users in group wheel to use su. account sufficient pam_localuser.so account required pam_wheel.so FILES /etc/passwd Local user account information. SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_localuser was written by Nalin Dahyabhai <nalin@redhat.com>. Linux-PAM-1.1.8/modules/pam_localuser/pam_localuser.80000644000000000000000000000554312216527601017350 00000000000000'\" t .\" Title: pam_localuser .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_LOCALUSER" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_localuser \- require users to be listed in /etc/passwd .SH "SYNOPSIS" .HP \w'\fBpam_localuser\&.so\fR\ 'u \fBpam_localuser\&.so\fR [debug] [file=\fI/path/passwd\fR] .SH "DESCRIPTION" .PP pam_localuser is a PAM module to help implementing site\-wide login policies, where they typically include a subset of the network\*(Aqs users and a few accounts that are local to a particular workstation\&. Using pam_localuser and pam_wheel or pam_listfile is an effective way to restrict access to either local users and/or a subset of the network\*(Aqs users\&. .PP This could also be implemented using pam_listfile\&.so and a very short awk script invoked by cron, but it\*(Aqs common enough to have been separated out\&. .SH "OPTIONS" .PP .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBfile=\fR\fB\fI/path/passwd\fR\fR .RS 4 Use a file other than /etc/passwd\&. .RE .SH "MODULE TYPES PROVIDED" .PP All module types (\fBaccount\fR, \fBauth\fR, \fBpassword\fR and \fBsession\fR) are provided\&. .SH "RETURN VALUES" .PP .PP PAM_SUCCESS .RS 4 The new localuser was set successfully\&. .RE .PP PAM_SERVICE_ERR .RS 4 No username was given\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known\&. .RE .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/su to allow only local users in group wheel to use su\&. .sp .if n \{\ .RS 4 .\} .nf account sufficient pam_localuser\&.so account required pam_wheel\&.so .fi .if n \{\ .RE .\} .sp .SH "FILES" .PP /etc/passwd .RS 4 Local user account information\&. .RE .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_localuser was written by Nalin Dahyabhai \&. Linux-PAM-1.1.8/modules/pam_localuser/README.xml0000644000000000000000000000225612160065211016076 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_localuser.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_localuser-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_xauth/0000755000000000000000000000000012216542312013636 500000000000000Linux-PAM-1.1.8/modules/pam_xauth/pam_xauth.c0000644000000000000000000005264612160065211015721 00000000000000/* * Copyright 2001-2003 Red Hat, Inc. * * 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. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PAM_SM_SESSION #include #include #include #include #ifdef WITH_SELINUX #include #include #include #endif #define DATANAME "pam_xauth_cookie_file" #define XAUTHENV "XAUTHORITY" #define HOMEENV "HOME" #define XAUTHDEF ".Xauthority" #define XAUTHTMP ".xauthXXXXXX" /* Hurd compatibility */ #ifndef PATH_MAX #define PATH_MAX 4096 #endif /* Possible paths to xauth executable */ static const char * const xauthpaths[] = { #ifdef PAM_PATH_XAUTH PAM_PATH_XAUTH, #endif "/usr/X11R6/bin/xauth", "/usr/bin/xauth", "/usr/bin/X11/xauth" }; /* Run a given command (with a NULL-terminated argument list), feeding it the * given input on stdin, and storing any output it generates. */ static int run_coprocess(pam_handle_t *pamh, const char *input, char **output, uid_t uid, gid_t gid, const char *command, ...) { int ipipe[2], opipe[2], i; char buf[LINE_MAX]; pid_t child; char *buffer = NULL; size_t buffer_size = 0; va_list ap; *output = NULL; /* Create stdio pipery. */ if (pipe(ipipe) == -1) { return -1; } if (pipe(opipe) == -1) { close(ipipe[0]); close(ipipe[1]); return -1; } /* Fork off a child. */ child = fork(); if (child == -1) { close(ipipe[0]); close(ipipe[1]); close(opipe[0]); close(opipe[1]); return -1; } if (child == 0) { /* We're the child. */ size_t j; char *args[10]; const char *tmp; int maxopened; /* Drop privileges. */ if (setgid(gid) == -1) { int err = errno; pam_syslog (pamh, LOG_ERR, "setgid(%lu) failed: %m", (unsigned long) getegid ()); _exit (err); } if (setgroups(0, NULL) == -1) { int err = errno; pam_syslog (pamh, LOG_ERR, "setgroups() failed: %m"); _exit (err); } if (setuid(uid) == -1) { int err = errno; pam_syslog (pamh, LOG_ERR, "setuid(%lu) failed: %m", (unsigned long) geteuid ()); _exit (err); } /* Initialize the argument list. */ memset(args, 0, sizeof(args)); /* Set the pipe descriptors up as stdin and stdout, and close * everything else, including the original values for the * descriptors. */ dup2(ipipe[0], STDIN_FILENO); dup2(opipe[1], STDOUT_FILENO); maxopened = (int)sysconf(_SC_OPEN_MAX); for (i = 0; i < maxopened; i++) { if ((i != STDIN_FILENO) && (i != STDOUT_FILENO)) { close(i); } } /* Convert the varargs list into a regular array of strings. */ va_start(ap, command); args[0] = strdup(command); for (j = 1; j < ((sizeof(args) / sizeof(args[0])) - 1); j++) { tmp = va_arg(ap, const char*); if (tmp == NULL) { break; } args[j] = strdup(tmp); } /* Run the command. */ execv(command, args); /* Never reached. */ _exit(1); } /* We're the parent, so close the other ends of the pipes. */ close(ipipe[0]); close(opipe[1]); /* Send input to the process (if we have any), then send an EOF. */ if (input) { (void)pam_modutil_write(ipipe[1], input, strlen(input)); } close(ipipe[1]); /* Read data output until we run out of stuff to read. */ i = pam_modutil_read(opipe[0], buf, sizeof(buf)); while ((i != 0) && (i != -1)) { char *tmp; /* Resize the buffer to hold the data. */ tmp = realloc(buffer, buffer_size + i + 1); if (tmp == NULL) { /* Uh-oh, bail. */ if (buffer != NULL) { free(buffer); } close(opipe[0]); waitpid(child, NULL, 0); return -1; } /* Save the new buffer location, copy the newly-read data into * the buffer, and make sure the result will be * nul-terminated. */ buffer = tmp; memcpy(buffer + buffer_size, buf, i); buffer[buffer_size + i] = '\0'; buffer_size += i; /* Try to read again. */ i = pam_modutil_read(opipe[0], buf, sizeof(buf)); } /* No more data. Clean up and return data. */ close(opipe[0]); *output = buffer; waitpid(child, NULL, 0); return 0; } /* Free a data item. */ static void cleanup (pam_handle_t *pamh UNUSED, void *data, int err UNUSED) { free (data); } /* Check if we want to allow export to the other user, or import from the * other user. */ static int check_acl(pam_handle_t *pamh, const char *sense, const char *this_user, const char *other_user, int noent_code, int debug) { char path[PATH_MAX]; struct passwd *pwd; FILE *fp = NULL; int i, fd = -1, save_errno; struct stat st; PAM_MODUTIL_DEF_PRIVS(privs); /* Check this user's file. */ pwd = pam_modutil_getpwnam(pamh, this_user); if (pwd == NULL) { pam_syslog(pamh, LOG_ERR, "error determining home directory for '%s'", this_user); return PAM_SESSION_ERR; } /* Figure out what that file is really named. */ i = snprintf(path, sizeof(path), "%s/.xauth/%s", pwd->pw_dir, sense); if ((i >= (int)sizeof(path)) || (i < 0)) { pam_syslog(pamh, LOG_ERR, "name of user's home directory is too long"); return PAM_SESSION_ERR; } if (pam_modutil_drop_priv(pamh, &privs, pwd)) return PAM_SESSION_ERR; if (!stat(path, &st)) { if (!S_ISREG(st.st_mode)) errno = EINVAL; else fd = open(path, O_RDONLY | O_NOCTTY); } save_errno = errno; if (pam_modutil_regain_priv(pamh, &privs)) { if (fd >= 0) close(fd); return PAM_SESSION_ERR; } if (fd >= 0) { if (!fstat(fd, &st)) { if (!S_ISREG(st.st_mode)) errno = EINVAL; else fp = fdopen(fd, "r"); } if (!fp) { save_errno = errno; close(fd); } } if (fp) { char buf[LINE_MAX], *tmp; /* Scan the file for a list of specs of users to "trust". */ while (fgets(buf, sizeof(buf), fp) != NULL) { tmp = memchr(buf, '\r', sizeof(buf)); if (tmp != NULL) { *tmp = '\0'; } tmp = memchr(buf, '\n', sizeof(buf)); if (tmp != NULL) { *tmp = '\0'; } if (fnmatch(buf, other_user, 0) == 0) { if (debug) { pam_syslog(pamh, LOG_DEBUG, "%s %s allowed by %s", other_user, sense, path); } fclose(fp); return PAM_SUCCESS; } } /* If there's no match in the file, we fail. */ if (debug) { pam_syslog(pamh, LOG_DEBUG, "%s not listed in %s", other_user, path); } fclose(fp); return PAM_PERM_DENIED; } else { /* Default to okay if the file doesn't exist. */ errno = save_errno; switch (errno) { case ENOENT: if (noent_code == PAM_SUCCESS) { if (debug) { pam_syslog(pamh, LOG_DEBUG, "%s does not exist, ignoring", path); } } else { if (debug) { pam_syslog(pamh, LOG_DEBUG, "%s does not exist, failing", path); } } return noent_code; default: if (debug) { pam_syslog(pamh, LOG_DEBUG, "error opening %s: %m", path); } return PAM_PERM_DENIED; } } } int pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { char *cookiefile = NULL, *xauthority = NULL, *cookie = NULL, *display = NULL, *tmp = NULL, *xauthlocalhostname = NULL; const char *user, *xauth = NULL; struct passwd *tpwd, *rpwd; int fd, i, debug = 0; int retval = PAM_SUCCESS; uid_t systemuser = 499, targetuser = 0; /* Parse arguments. We don't understand many, so no sense in breaking * this into a separate function. */ for (i = 0; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) { debug = 1; continue; } if (strncmp(argv[i], "xauthpath=", 10) == 0) { xauth = argv[i] + 10; continue; } if (strncmp(argv[i], "targetuser=", 11) == 0) { long l = strtol(argv[i] + 11, &tmp, 10); if ((strlen(argv[i] + 11) > 0) && (*tmp == '\0')) { targetuser = l; } else { pam_syslog(pamh, LOG_WARNING, "invalid value for targetuser (`%s')", argv[i] + 11); } continue; } if (strncmp(argv[i], "systemuser=", 11) == 0) { long l = strtol(argv[i] + 11, &tmp, 10); if ((strlen(argv[i] + 11) > 0) && (*tmp == '\0')) { systemuser = l; } else { pam_syslog(pamh, LOG_WARNING, "invalid value for systemuser (`%s')", argv[i] + 11); } continue; } pam_syslog(pamh, LOG_WARNING, "unrecognized option `%s'", argv[i]); } if (xauth == NULL) { size_t j; for (j = 0; j < sizeof(xauthpaths)/sizeof(xauthpaths[0]); j++) { if (access(xauthpaths[j], X_OK) == 0) { xauth = xauthpaths[j]; break; } } if (xauth == NULL) { /* xauth executable not found - nothing to do */ return PAM_SUCCESS; } } /* If DISPLAY isn't set, we don't really care, now do we? */ if ((display = getenv("DISPLAY")) == NULL) { if (debug) { pam_syslog(pamh, LOG_DEBUG, "user has no DISPLAY, doing nothing"); } return PAM_SUCCESS; } /* Read the target user's name. */ if (pam_get_user(pamh, &user, NULL) != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "error determining target user's name"); retval = PAM_SESSION_ERR; goto cleanup; } rpwd = pam_modutil_getpwuid(pamh, getuid()); if (rpwd == NULL) { pam_syslog(pamh, LOG_ERR, "error determining invoking user's name"); retval = PAM_SESSION_ERR; goto cleanup; } /* Get the target user's UID and primary GID, which we'll need to set * on the xauthority file we create later on. */ tpwd = pam_modutil_getpwnam(pamh, user); if (tpwd == NULL) { pam_syslog(pamh, LOG_ERR, "error determining target user's UID"); retval = PAM_SESSION_ERR; goto cleanup; } if (debug) { pam_syslog(pamh, LOG_DEBUG, "requesting user %lu/%lu, target user %lu/%lu", (unsigned long) rpwd->pw_uid, (unsigned long) rpwd->pw_gid, (unsigned long) tpwd->pw_uid, (unsigned long) tpwd->pw_gid); } /* If the UID is a system account (and not the superuser), forget * about forwarding keys. */ if ((tpwd->pw_uid != 0) && (tpwd->pw_uid != targetuser) && (tpwd->pw_uid <= systemuser)) { if (debug) { pam_syslog(pamh, LOG_DEBUG, "not forwarding cookies to user ID %lu", (unsigned long) tpwd->pw_uid); } retval = PAM_SESSION_ERR; goto cleanup; } /* If current user and the target user are the same, don't check the ACL list, but forward X11 */ if (strcmp (rpwd->pw_name, tpwd->pw_name) != 0) { /* Check that both users are amenable to this. By default, this * boils down to this policy: * export(ruser=root): only if is listed in .xauth/export * export(ruser=*) if is listed in .xauth/export, or * if .xauth/export does not exist * import(user=*): if is listed in .xauth/import, or * if .xauth/import does not exist */ i = (getuid() != 0 || tpwd->pw_uid == 0) ? PAM_SUCCESS : PAM_PERM_DENIED; i = check_acl(pamh, "export", rpwd->pw_name, user, i, debug); if (i != PAM_SUCCESS) { retval = PAM_SESSION_ERR; goto cleanup; } i = PAM_SUCCESS; i = check_acl(pamh, "import", user, rpwd->pw_name, i, debug); if (i != PAM_SUCCESS) { retval = PAM_SESSION_ERR; goto cleanup; } } else { if (debug) pam_syslog (pamh, LOG_DEBUG, "current and target user are the same, forward X11"); } /* Figure out where the source user's .Xauthority file is. */ if (getenv(XAUTHENV) != NULL) { cookiefile = strdup(getenv(XAUTHENV)); } else { cookiefile = malloc(strlen(rpwd->pw_dir) + 1 + strlen(XAUTHDEF) + 1); if (cookiefile == NULL) { retval = PAM_SESSION_ERR; goto cleanup; } strcpy(cookiefile, rpwd->pw_dir); strcat(cookiefile, "/"); strcat(cookiefile, XAUTHDEF); } if (debug) { pam_syslog(pamh, LOG_DEBUG, "reading keys from `%s'", cookiefile); } /* Read the user's .Xauthority file. Because the current UID is * the original user's UID, this will only fail if something has * gone wrong, or we have no cookies. */ if (debug) { pam_syslog(pamh, LOG_DEBUG, "running \"%s %s %s %s %s\" as %lu/%lu", xauth, "-f", cookiefile, "nlist", display, (unsigned long) getuid(), (unsigned long) getgid()); } if (run_coprocess(pamh, NULL, &cookie, getuid(), getgid(), xauth, "-f", cookiefile, "nlist", display, NULL) == 0) { #ifdef WITH_SELINUX security_context_t context = NULL; #endif PAM_MODUTIL_DEF_PRIVS(privs); /* Check that we got a cookie. If not, we get creative. */ if (((cookie == NULL) || (strlen(cookie) == 0)) && ((strncmp(display, "localhost:", 10) == 0) || (strncmp(display, "localhost/unix:", 15) == 0))) { char *t, *screen; size_t tlen, slen; /* Free the useless cookie string. */ if (cookie != NULL) { free(cookie); cookie = NULL; } /* Allocate enough space to hold an adjusted name. */ tlen = strlen(display) + LINE_MAX + 1; t = malloc(tlen); if (t != NULL) { memset(t, 0, tlen); if (gethostname(t, tlen - 1) != -1) { /* Append the protocol and then the * screen number. */ if (strlen(t) < tlen - 6) { strcat(t, "/unix:"); } screen = strchr(display, ':'); if (screen != NULL) { screen++; slen = strlen(screen); if (strlen(t) + slen < tlen) { strcat(t, screen); } } if (debug) { pam_syslog(pamh, LOG_DEBUG, "no key for `%s', " "trying `%s'", display, t); } /* Read the cookie for this display. */ if (debug) { pam_syslog(pamh, LOG_DEBUG, "running " "\"%s %s %s %s %s\" as " "%lu/%lu", xauth, "-f", cookiefile, "nlist", t, (unsigned long) getuid(), (unsigned long) getgid()); } run_coprocess(pamh, NULL, &cookie, getuid(), getgid(), xauth, "-f", cookiefile, "nlist", t, NULL); } free(t); t = NULL; } } /* Check that we got a cookie, this time for real. */ if ((cookie == NULL) || (strlen(cookie) == 0)) { if (debug) { pam_syslog(pamh, LOG_DEBUG, "no key"); } retval = PAM_SESSION_ERR; goto cleanup; } /* Generate the environment variable * "XAUTHORITY=/filename". */ if (asprintf(&xauthority, "%s=%s/%s", XAUTHENV, tpwd->pw_dir, XAUTHTMP) < 0) { xauthority = NULL; if (debug) { pam_syslog(pamh, LOG_DEBUG, "out of memory"); } retval = PAM_SESSION_ERR; goto cleanup; } /* Generate a new file to hold the data. */ if (pam_modutil_drop_priv(pamh, &privs, tpwd)) { retval = PAM_SESSION_ERR; goto cleanup; } #ifdef WITH_SELINUX if (is_selinux_enabled() > 0) { struct selabel_handle *ctx = selabel_open(SELABEL_CTX_FILE, NULL, 0); if (ctx != NULL) { if (selabel_lookup(ctx, &context, xauthority + sizeof(XAUTHENV), S_IFREG) != 0) { pam_syslog(pamh, LOG_WARNING, "could not get SELinux label for '%s'", xauthority + sizeof(XAUTHENV)); } selabel_close(ctx); if (setfscreatecon(context)) { pam_syslog(pamh, LOG_WARNING, "setfscreatecon(%s) failed: %m", context); } } } #endif /* WITH_SELINUX */ fd = mkstemp(xauthority + sizeof(XAUTHENV)); if (fd < 0) pam_syslog(pamh, LOG_ERR, "error creating temporary file `%s': %m", xauthority + sizeof(XAUTHENV)); #ifdef WITH_SELINUX if (context != NULL) { free(context); setfscreatecon(NULL); } #endif /* WITH_SELINUX */ if (fd >= 0) close(fd); if (pam_modutil_regain_priv(pamh, &privs) || fd < 0) { retval = PAM_SESSION_ERR; goto cleanup; } /* Get a copy of the filename to save as a data item for * removal at session-close time. */ free(cookiefile); cookiefile = strdup(xauthority + sizeof(XAUTHENV)); /* Save the filename. */ if (pam_set_data(pamh, DATANAME, cookiefile, cleanup) != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "error saving name of temporary file `%s'", cookiefile); unlink(cookiefile); retval = PAM_SESSION_ERR; goto cleanup; } /* Set the new variable in the environment. */ if (pam_putenv (pamh, xauthority) != PAM_SUCCESS) pam_syslog(pamh, LOG_ERR, "can't set environment variable '%s'", xauthority); putenv (xauthority); /* The environment owns this string now. */ xauthority = NULL; /* Don't free environment variables. */ /* set $DISPLAY in pam handle to make su - work */ { char *d; if (asprintf(&d, "DISPLAY=%s", display) < 0) { pam_syslog(pamh, LOG_ERR, "out of memory"); cookiefile = NULL; retval = PAM_SESSION_ERR; goto cleanup; } if (pam_putenv (pamh, d) != PAM_SUCCESS) pam_syslog (pamh, LOG_ERR, "can't set environment variable '%s'", d); free (d); } /* set XAUTHLOCALHOSTNAME to make sure that su - work under gnome */ if ((xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME")) != NULL) { char *d; if (asprintf(&d, "XAUTHLOCALHOSTNAME=%s", xauthlocalhostname) < 0) { pam_syslog(pamh, LOG_ERR, "out of memory"); retval = PAM_SESSION_ERR; goto cleanup; } if (pam_putenv (pamh, d) != PAM_SUCCESS) pam_syslog (pamh, LOG_ERR, "can't set environment variable '%s'", d); free (d); } /* Merge the cookie we read before into the new file. */ if (debug) { pam_syslog(pamh, LOG_DEBUG, "writing key `%s' to temporary file `%s'", cookie, cookiefile); } if (debug) { pam_syslog(pamh, LOG_DEBUG, "running \"%s %s %s %s %s\" as %lu/%lu", xauth, "-f", cookiefile, "nmerge", "-", (unsigned long) tpwd->pw_uid, (unsigned long) tpwd->pw_gid); } run_coprocess(pamh, cookie, &tmp, tpwd->pw_uid, tpwd->pw_gid, xauth, "-f", cookiefile, "nmerge", "-", NULL); /* We don't need to keep a copy of these around any more. */ cookiefile = NULL; free(tmp); } cleanup: /* Unset any old XAUTHORITY variable in the environment. */ if (retval != PAM_SUCCESS && getenv (XAUTHENV)) unsetenv (XAUTHENV); free(cookiefile); free(cookie); free(xauthority); return retval; } int pam_sm_close_session (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { int i, debug = 0; const char *user; const void *data; const char *cookiefile; struct passwd *tpwd; PAM_MODUTIL_DEF_PRIVS(privs); /* Try to retrieve the name of a file we created when * the session was opened. */ if (pam_get_data(pamh, DATANAME, &data) != PAM_SUCCESS) return PAM_SUCCESS; cookiefile = data; /* Parse arguments. We don't understand many, so * no sense in breaking this into a separate function. */ for (i = 0; i < argc; i++) { if (strcmp(argv[i], "debug") == 0) { debug = 1; continue; } if (strncmp(argv[i], "xauthpath=", 10) == 0) continue; if (strncmp(argv[i], "systemuser=", 11) == 0) continue; if (strncmp(argv[i], "targetuser=", 11) == 0) continue; pam_syslog(pamh, LOG_WARNING, "unrecognized option `%s'", argv[i]); } if (pam_get_user(pamh, &user, NULL) != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "error determining target user's name"); return PAM_SESSION_ERR; } if (!(tpwd = pam_modutil_getpwnam(pamh, user))) { pam_syslog(pamh, LOG_ERR, "error determining target user's UID"); return PAM_SESSION_ERR; } if (debug) pam_syslog(pamh, LOG_DEBUG, "removing `%s'", cookiefile); if (pam_modutil_drop_priv(pamh, &privs, tpwd)) return PAM_SESSION_ERR; if (unlink(cookiefile) == -1 && errno != ENOENT) pam_syslog(pamh, LOG_WARNING, "Couldn't remove `%s': %m", cookiefile); if (pam_modutil_regain_priv(pamh, &privs)) return PAM_SESSION_ERR; return PAM_SUCCESS; } /* static module data */ #ifdef PAM_STATIC struct pam_module _pam_xauth_modstruct = { "pam_xauth", NULL, NULL, NULL, pam_sm_open_session, pam_sm_close_session, NULL }; #endif Linux-PAM-1.1.8/modules/pam_xauth/Makefile.am0000644000000000000000000000135412160065211015611 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README ${MANS} $(XMLS) tst-pam_xauth man_MANS = pam_xauth.8 XMLS = README.xml pam_xauth.8.xml TESTS = tst-pam_xauth securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_xauth.la pam_xauth_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBSELINUX@ if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_xauth.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_xauth/README0000644000000000000000000000715712216527617014463 00000000000000pam_xauth — PAM module to forward xauth keys between users ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_xauth PAM module is designed to forward xauth keys (sometimes referred to as "cookies") between users. Without pam_xauth, when xauth is enabled and a user uses the su(1) command to assume another user's privileges, that user is no longer able to access the original user's X display because the new user does not have the key needed to access the display. pam_xauth solves the problem by forwarding the key from the user running su (the source user) to the user whose identity the source user is assuming (the target user) when the session is created, and destroying the key when the session is torn down. This means, for example, that when you run su(1) from an xterm session, you will be able to run X programs without explicitly dealing with the xauth(1) xauth command or ~/.Xauthority files. pam_xauth will only forward keys if xauth can list a key connected to the $DISPLAY environment variable. Primitive access control is provided by ~/.xauth/export in the invoking user's home directory and ~/.xauth/import in the target user's home directory. If a user has a ~/.xauth/import file, the user will only receive cookies from users listed in the file. If there is no ~/.xauth/import file, the user will accept cookies from any other user. If a user has a .xauth/export file, the user will only forward cookies to users listed in the file. If there is no ~/.xauth/export file, and the invoking user is not root, the user will forward cookies to any other user. If there is no ~ /.xauth/export file, and the invoking user is root, the user will not forward cookies to other users. Both the import and export files support wildcards (such as *). Both the import and export files can be empty, signifying that no users are allowed. OPTIONS debug Print debug information. xauthpath=/path/to/xauth Specify the path the xauth program (it is expected in /usr/X11R6/bin/xauth, /usr/bin/xauth, or /usr/bin/X11/xauth by default). systemuser=UID Specify the highest UID which will be assumed to belong to a "system" user. pam_xauth will refuse to forward credentials to users with UID less than or equal to this number, except for root and the "targetuser", if specified. targetuser=UID Specify a single target UID which is exempt from the systemuser check. EXAMPLES Add the following line to /etc/pam.d/su to forward xauth keys between users when calling su: session optional pam_xauth.so IMPLEMENTATION DETAILS pam_xauth will work only if it is used from a setuid application in which the getuid() call returns the id of the user running the application, and for which PAM can supply the name of the account that the user is attempting to assume. The typical application of this type is su(1). The application must call both pam_open_session() and pam_close_session() with the ruid set to the uid of the calling user and the euid set to root, and must have provided as the PAM_USER item the name of the target user. pam_xauth calls xauth(1) as the source user to extract the key for $DISPLAY, then calls xauth as the target user to merge the key into the a temporary database and later remove the database. pam_xauth cannot be told to not remove the keys when the session is closed. AUTHOR pam_xauth was written by Nalin Dahyabhai , based on original version by Michael K. Johnson . Linux-PAM-1.1.8/modules/pam_xauth/tst-pam_xauth0000755000000000000000000000006412160065211016276 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_xauth.so Linux-PAM-1.1.8/modules/pam_xauth/pam_xauth.80000644000000000000000000001320712216527617015653 00000000000000'\" t .\" Title: pam_xauth .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_XAUTH" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_xauth \- PAM module to forward xauth keys between users .SH "SYNOPSIS" .HP \w'\fBpam_xauth\&.so\fR\ 'u \fBpam_xauth\&.so\fR [debug] [xauthpath=\fI/path/to/xauth\fR] [systemuser=\fIUID\fR] [targetuser=\fIUID\fR] .SH "DESCRIPTION" .PP The pam_xauth PAM module is designed to forward xauth keys (sometimes referred to as "cookies") between users\&. .PP Without pam_xauth, when xauth is enabled and a user uses the \fBsu\fR(1) command to assume another user\*(Aqs privileges, that user is no longer able to access the original user\*(Aqs X display because the new user does not have the key needed to access the display\&. pam_xauth solves the problem by forwarding the key from the user running su (the source user) to the user whose identity the source user is assuming (the target user) when the session is created, and destroying the key when the session is torn down\&. .PP This means, for example, that when you run \fBsu\fR(1) from an xterm session, you will be able to run X programs without explicitly dealing with the \fBxauth\fR(1) xauth command or ~/\&.Xauthority files\&. .PP pam_xauth will only forward keys if xauth can list a key connected to the $DISPLAY environment variable\&. .PP Primitive access control is provided by ~/\&.xauth/export in the invoking user\*(Aqs home directory and ~/\&.xauth/import in the target user\*(Aqs home directory\&. .PP If a user has a ~/\&.xauth/import file, the user will only receive cookies from users listed in the file\&. If there is no ~/\&.xauth/import file, the user will accept cookies from any other user\&. .PP If a user has a \&.xauth/export file, the user will only forward cookies to users listed in the file\&. If there is no ~/\&.xauth/export file, and the invoking user is not \fBroot\fR, the user will forward cookies to any other user\&. If there is no ~/\&.xauth/export file, and the invoking user is \fBroot\fR, the user will \fInot\fR forward cookies to other users\&. .PP Both the import and export files support wildcards (such as \fI*\fR)\&. Both the import and export files can be empty, signifying that no users are allowed\&. .SH "OPTIONS" .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBxauthpath=\fR\fB\fI/path/to/xauth\fR\fR .RS 4 Specify the path the xauth program (it is expected in /usr/X11R6/bin/xauth, /usr/bin/xauth, or /usr/bin/X11/xauth by default)\&. .RE .PP \fBsystemuser=\fR\fB\fIUID\fR\fR .RS 4 Specify the highest UID which will be assumed to belong to a "system" user\&. pam_xauth will refuse to forward credentials to users with UID less than or equal to this number, except for root and the "targetuser", if specified\&. .RE .PP \fBtargetuser=\fR\fB\fIUID\fR\fR .RS 4 Specify a single target UID which is exempt from the systemuser check\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBsession\fR type is provided\&. .SH "RETURN VALUES" .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_PERM_DENIED .RS 4 Permission denied by import/export file\&. .RE .PP PAM_SESSION_ERR .RS 4 Cannot determine user name, UID or access users home directory\&. .RE .PP PAM_SUCCESS .RS 4 Success\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known\&. .RE .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/su to forward xauth keys between users when calling su: .sp .if n \{\ .RS 4 .\} .nf session optional pam_xauth\&.so .fi .if n \{\ .RE .\} .sp .SH "IMPLEMENTATION DETAILS" .PP pam_xauth will work \fIonly\fR if it is used from a setuid application in which the \fBgetuid\fR() call returns the id of the user running the application, and for which PAM can supply the name of the account that the user is attempting to assume\&. The typical application of this type is \fBsu\fR(1)\&. The application must call both \fBpam_open_session\fR() and \fBpam_close_session\fR() with the ruid set to the uid of the calling user and the euid set to root, and must have provided as the PAM_USER item the name of the target user\&. .PP pam_xauth calls \fBxauth\fR(1) as the source user to extract the key for $DISPLAY, then calls xauth as the target user to merge the key into the a temporary database and later remove the database\&. .PP pam_xauth cannot be told to not remove the keys when the session is closed\&. .SH "FILES" .PP ~/\&.xauth/import .RS 4 XXX .RE .PP ~/\&.xauth/export .RS 4 XXX .RE .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_xauth was written by Nalin Dahyabhai , based on original version by Michael K\&. Johnson \&. Linux-PAM-1.1.8/modules/pam_xauth/Makefile.in0000644000000000000000000006010712216527540015635 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_xauth DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_xauth_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_xauth_la_SOURCES = pam_xauth.c pam_xauth_la_OBJECTS = pam_xauth.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_xauth.c DIST_SOURCES = pam_xauth.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README ${MANS} $(XMLS) tst-pam_xauth man_MANS = pam_xauth.8 XMLS = README.xml pam_xauth.8.xml TESTS = tst-pam_xauth securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_xauth.la pam_xauth_la_LIBADD = $(top_builddir)/libpam/libpam.la @LIBSELINUX@ @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_xauth/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_xauth/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_xauth.la: $(pam_xauth_la_OBJECTS) $(pam_xauth_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_xauth_la_OBJECTS) $(pam_xauth_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_xauth.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_xauth.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_xauth/pam_xauth.8.xml0000644000000000000000000002233312160065211016433 00000000000000 pam_xauth 8 Linux-PAM Manual pam_xauth PAM module to forward xauth keys between users pam_xauth.so debug xauthpath=/path/to/xauth systemuser=UID targetuser=UID DESCRIPTION The pam_xauth PAM module is designed to forward xauth keys (sometimes referred to as "cookies") between users. Without pam_xauth, when xauth is enabled and a user uses the su1 command to assume another user's privileges, that user is no longer able to access the original user's X display because the new user does not have the key needed to access the display. pam_xauth solves the problem by forwarding the key from the user running su (the source user) to the user whose identity the source user is assuming (the target user) when the session is created, and destroying the key when the session is torn down. This means, for example, that when you run su1 from an xterm session, you will be able to run X programs without explicitly dealing with the xauth1 xauth command or ~/.Xauthority files. pam_xauth will only forward keys if xauth can list a key connected to the $DISPLAY environment variable. Primitive access control is provided by ~/.xauth/export in the invoking user's home directory and ~/.xauth/import in the target user's home directory. If a user has a ~/.xauth/import file, the user will only receive cookies from users listed in the file. If there is no ~/.xauth/import file, the user will accept cookies from any other user. If a user has a .xauth/export file, the user will only forward cookies to users listed in the file. If there is no ~/.xauth/export file, and the invoking user is not root, the user will forward cookies to any other user. If there is no ~/.xauth/export file, and the invoking user is root, the user will not forward cookies to other users. Both the import and export files support wildcards (such as *). Both the import and export files can be empty, signifying that no users are allowed. OPTIONS Print debug information. Specify the path the xauth program (it is expected in /usr/X11R6/bin/xauth, /usr/bin/xauth, or /usr/bin/X11/xauth by default). Specify the highest UID which will be assumed to belong to a "system" user. pam_xauth will refuse to forward credentials to users with UID less than or equal to this number, except for root and the "targetuser", if specified. Specify a single target UID which is exempt from the systemuser check. MODULE TYPES PROVIDED Only the session type is provided. RETURN VALUES PAM_BUF_ERR Memory buffer error. PAM_PERM_DENIED Permission denied by import/export file. PAM_SESSION_ERR Cannot determine user name, UID or access users home directory. PAM_SUCCESS Success. PAM_USER_UNKNOWN User not known. EXAMPLES Add the following line to /etc/pam.d/su to forward xauth keys between users when calling su: session optional pam_xauth.so IMPLEMENTATION DETAILS pam_xauth will work only if it is used from a setuid application in which the getuid() call returns the id of the user running the application, and for which PAM can supply the name of the account that the user is attempting to assume. The typical application of this type is su1 . The application must call both pam_open_session() and pam_close_session() with the ruid set to the uid of the calling user and the euid set to root, and must have provided as the PAM_USER item the name of the target user. pam_xauth calls xauth1 as the source user to extract the key for $DISPLAY, then calls xauth as the target user to merge the key into the a temporary database and later remove the database. pam_xauth cannot be told to not remove the keys when the session is closed. FILES ~/.xauth/import XXX ~/.xauth/export XXX SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_xauth was written by Nalin Dahyabhai <nalin@redhat.com>, based on original version by Michael K. Johnson <johnsonm@redhat.com>. Linux-PAM-1.1.8/modules/pam_xauth/README.xml0000644000000000000000000000247212160065211015236 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_xauth.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_xauth-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_umask/0000755000000000000000000000000012216542312013625 500000000000000Linux-PAM-1.1.8/modules/pam_umask/pam_umask.8.xml0000644000000000000000000001252412160065211016412 00000000000000 pam_umask 8 Linux-PAM Manual pam_umask PAM module to set the file mode creation mask pam_umask.so debug silent usergroups umask=mask DESCRIPTION pam_umask is a PAM module to set the file mode creation mask of the current environment. The umask affects the default permissions assigned to newly created files. The PAM module tries to get the umask value from the following places in the following order: umask= argument umask= entry in the user's GECOS field UMASK= entry from /etc/default/login UMASK entry from /etc/login.defs The GECOS field is split on comma ',' characters. The module also in addition to the umask= entry recognizes pri= entry, which sets the nice priority value for the session, and ulimit= entry, which sets the maximum size of files the processes in the session can create. OPTIONS Print debug information. Don't print informative messages. If the user is not root and the username is the same as primary group name, the umask group bits are set to be the same as owner bits (examples: 022 -> 002, 077 -> 007). Sets the calling process's file mode creation mask (umask) to & 0777. The value is interpreted as Octal. MODULE TYPES PROVIDED Only the type is provided. RETURN VALUES PAM_SUCCESS The new umask was set successfully. PAM_SERVICE_ERR No username was given. PAM_USER_UNKNOWN User not known. EXAMPLES Add the following line to /etc/pam.d/login to set the user specific umask at login: session optional pam_umask.so umask=0022 SEE ALSO pam.conf5 , pam.d5 , pam8 AUTHOR pam_umask was written by Thorsten Kukuk <kukuk@thkukuk.de>. Linux-PAM-1.1.8/modules/pam_umask/Makefile.am0000644000000000000000000000134012160065211015573 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_umask man_MANS = pam_umask.8 XMLS = README.xml pam_umask.8.xml TESTS = tst-pam_umask securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_umask.la pam_umask_la_LIBADD = $(top_builddir)/libpam/libpam.la if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_umask.8.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_umask/README0000644000000000000000000000313712216527614014441 00000000000000pam_umask — PAM module to set the file mode creation mask ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION pam_umask is a PAM module to set the file mode creation mask of the current environment. The umask affects the default permissions assigned to newly created files. The PAM module tries to get the umask value from the following places in the following order: • umask= argument • umask= entry in the user's GECOS field • UMASK= entry from /etc/default/login • UMASK entry from /etc/login.defs The GECOS field is split on comma ',' characters. The module also in addition to the umask= entry recognizes pri= entry, which sets the nice priority value for the session, and ulimit= entry, which sets the maximum size of files the processes in the session can create. OPTIONS debug Print debug information. silent Don't print informative messages. usergroups If the user is not root and the username is the same as primary group name, the umask group bits are set to be the same as owner bits (examples: 022 -> 002, 077 -> 007). umask=mask Sets the calling process's file mode creation mask (umask) to mask & 0777. The value is interpreted as Octal. EXAMPLES Add the following line to /etc/pam.d/login to set the user specific umask at login: session optional pam_umask.so umask=0022 AUTHOR pam_umask was written by Thorsten Kukuk . Linux-PAM-1.1.8/modules/pam_umask/pam_umask.c0000644000000000000000000002023512160066605015674 00000000000000/* * Copyright (c) 2005, 2006, 2007, 2010, 2013 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 V2, 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. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PAM_SM_SESSION #include #include #include #define BUF_SIZE 4096 #define LOGIN_DEFS "/etc/login.defs" #define LOGIN_CONF "/etc/default/login" struct options_t { int debug; int usergroups; int silent; char *umask; }; typedef struct options_t options_t; static void parse_option (const pam_handle_t *pamh, const char *argv, options_t *options) { if (argv == NULL || argv[0] == '\0') return; if (strcasecmp (argv, "debug") == 0) options->debug = 1; else if (strncasecmp (argv, "umask=", 6) == 0) options->umask = strdup (&argv[6]); else if (strcasecmp (argv, "usergroups") == 0) options->usergroups = 1; else if (strcasecmp (argv, "silent") == 0) options->silent = 1; else pam_syslog (pamh, LOG_ERR, "Unknown option: `%s'", argv); } static char * search_key (const char *filename) { FILE *fp; char *buf = NULL; size_t buflen = 0; char *retval = NULL; fp = fopen (filename, "r"); if (NULL == fp) return NULL; 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 = BUF_SIZE; buf = malloc (buflen); if (buf == NULL) { fclose (fp); return NULL; } } buf[0] = '\0'; if (fgets (buf, buflen - 1, fp) == NULL) break; else 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; if (strcasecmp (tmp, "UMASK") == 0) { retval = strdup (cp); break; } } fclose (fp); free (buf); return retval; } static int get_options (const pam_handle_t *pamh, options_t *options, int argc, const char **argv) { memset (options, 0, sizeof (options_t)); /* Parse parameters for module */ for ( ; argc-- > 0; argv++) parse_option (pamh, *argv, options); if (options->umask == NULL) options->umask = search_key (LOGIN_DEFS); if (options->umask == NULL) options->umask = search_key (LOGIN_CONF); return 0; } static void set_umask (const char *value) { const char *value_orig = value; mode_t mask; char *endptr; mask = strtoul (value, &endptr, 8) & 0777; if (((mask == 0) && (value_orig == endptr)) || ((mask == UINT_MAX) && (errno == ERANGE))) return; umask (mask); return; } /* Set the process nice, ulimit, and umask from the password file entry. */ static void setup_limits_from_gecos (pam_handle_t *pamh, options_t *options, struct passwd *pw) { char *cp; if (options->usergroups) { /* if not root and username is the same as primary group name, set umask group bits to be the same as owner bits (examples: 022 -> 002, 077 -> 007). */ if (pw->pw_uid != 0) { struct group *grp = pam_modutil_getgrgid (pamh, pw->pw_gid); if (grp && (strcmp (pw->pw_name, grp->gr_name) == 0)) { mode_t oldmask = umask (0777); umask ((oldmask & ~070) | ((oldmask >> 3) & 070)); } } } /* See if the GECOS field contains values for NICE, UMASK or ULIMIT. */ for (cp = pw->pw_gecos; cp != NULL; cp = strchr (cp, ',')) { if (*cp == ',') cp++; if (strncasecmp (cp, "umask=", 6) == 0) umask (strtol (cp + 6, NULL, 8) & 0777); else if (strncasecmp (cp, "pri=", 4) == 0) { errno = 0; if (nice (strtol (cp + 4, NULL, 10)) == -1 && errno != 0) { if (!options->silent || options->debug) pam_error (pamh, "nice failed: %m\n"); pam_syslog (pamh, LOG_ERR, "nice failed: %m"); } } else if (strncasecmp (cp, "ulimit=", 7) == 0) { struct rlimit rlimit_fsize; rlimit_fsize.rlim_cur = 512L * strtol (cp + 7, NULL, 10); rlimit_fsize.rlim_max = rlimit_fsize.rlim_cur; if (setrlimit (RLIMIT_FSIZE, &rlimit_fsize) == -1) { if (!options->silent || options->debug) pam_error (pamh, "setrlimit failed: %m\n"); pam_syslog (pamh, LOG_ERR, "setrlimit failed: %m"); } } } } PAM_EXTERN int pam_sm_open_session (pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) { struct passwd *pw; options_t options; const char *name; int retval = PAM_SUCCESS; get_options (pamh, &options, argc, argv); if (flags & PAM_SILENT) options.silent = 1; /* get the user name. */ if ((retval = pam_get_user (pamh, &name, NULL)) != PAM_SUCCESS) { pam_syslog (pamh, LOG_ERR, "pam_get_user failed: return %d", retval); return (retval == PAM_CONV_AGAIN ? PAM_INCOMPLETE:retval); } if (name == NULL || name[0] == '\0') { if (name) { pam_syslog (pamh, LOG_ERR, "bad username [%s]", name); return PAM_USER_UNKNOWN; } return PAM_SERVICE_ERR; } pw = pam_modutil_getpwnam (pamh, name); if (pw == NULL) { pam_syslog (pamh, LOG_ERR, "account for %s not found", name); return PAM_USER_UNKNOWN; } if (options.umask != NULL) { set_umask (options.umask); free (options.umask); } setup_limits_from_gecos (pamh, &options, pw); return retval; } PAM_EXTERN int pam_sm_close_session (pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) { return PAM_SUCCESS; } #ifdef PAM_STATIC /* static module data */ struct pam_module _pam_umask_modstruct = { "pam_umask", NULL, NULL, NULL, pam_sm_open_session, pam_sm_close_session, NULL }; #endif /* end of module definition */ Linux-PAM-1.1.8/modules/pam_umask/tst-pam_umask0000755000000000000000000000006412160065211016254 00000000000000#!/bin/sh ../../tests/tst-dlopen .libs/pam_umask.so Linux-PAM-1.1.8/modules/pam_umask/pam_umask.80000644000000000000000000000700112216527614015621 00000000000000'\" t .\" Title: pam_umask .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_UMASK" "8" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_umask \- PAM module to set the file mode creation mask .SH "SYNOPSIS" .HP \w'\fBpam_umask\&.so\fR\ 'u \fBpam_umask\&.so\fR [debug] [silent] [usergroups] [umask=\fImask\fR] .SH "DESCRIPTION" .PP pam_umask is a PAM module to set the file mode creation mask of the current environment\&. The umask affects the default permissions assigned to newly created files\&. .PP The PAM module tries to get the umask value from the following places in the following order: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} umask= argument .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} umask= entry in the user\*(Aqs GECOS field .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} UMASK= entry from /etc/default/login .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} UMASK entry from /etc/login\&.defs .RE .PP The GECOS field is split on comma \*(Aq,\*(Aq characters\&. The module also in addition to the umask= entry recognizes pri= entry, which sets the nice priority value for the session, and ulimit= entry, which sets the maximum size of files the processes in the session can create\&. .SH "OPTIONS" .PP .PP \fBdebug\fR .RS 4 Print debug information\&. .RE .PP \fBsilent\fR .RS 4 Don\*(Aqt print informative messages\&. .RE .PP \fBusergroups\fR .RS 4 If the user is not root and the username is the same as primary group name, the umask group bits are set to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007)\&. .RE .PP \fBumask=\fR\fB\fImask\fR\fR .RS 4 Sets the calling process\*(Aqs file mode creation mask (umask) to \fBmask\fR & 0777\&. The value is interpreted as Octal\&. .RE .SH "MODULE TYPES PROVIDED" .PP Only the \fBsession\fR type is provided\&. .SH "RETURN VALUES" .PP .PP PAM_SUCCESS .RS 4 The new umask was set successfully\&. .RE .PP PAM_SERVICE_ERR .RS 4 No username was given\&. .RE .PP PAM_USER_UNKNOWN .RS 4 User not known\&. .RE .SH "EXAMPLES" .PP Add the following line to /etc/pam\&.d/login to set the user specific umask at login: .sp .if n \{\ .RS 4 .\} .nf session optional pam_umask\&.so umask=0022 .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_umask was written by Thorsten Kukuk \&. Linux-PAM-1.1.8/modules/pam_umask/Makefile.in0000644000000000000000000006007212216527540015625 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ # # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_umask DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man8dir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_umask_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_umask_la_SOURCES = pam_umask.c pam_umask_la_OBJECTS = pam_umask.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_umask.c DIST_SOURCES = pam_umask.c man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_umask man_MANS = pam_umask.8 XMLS = README.xml pam_umask.8.xml TESTS = tst-pam_umask securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_umask.la pam_umask_la_LIBADD = $(top_builddir)/libpam/libpam.la @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_umask/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_umask/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_umask.la: $(pam_umask_la_OBJECTS) $(pam_umask_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_umask_la_OBJECTS) $(pam_umask_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_umask.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man8 install-pdf \ install-pdf-am install-ps install-ps-am \ install-securelibLTLIBRARIES 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-man uninstall-man8 \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_umask.8.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_umask/README.xml0000644000000000000000000000220212160065211015214 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_umask.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_umask-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_group/0000755000000000000000000000000012216542311013640 500000000000000Linux-PAM-1.1.8/modules/pam_group/group.conf.5.xml0000644000000000000000000001207112160065211016523 00000000000000 group.conf 5 Linux-PAM Manual group.conf configuration file for the pam_group module DESCRIPTION The pam_group PAM module does not authenticate the user, but instead it grants group memberships (in the credential setting phase of the authentication module) to the user. Such memberships are based on the service they are applying for. For this module to function correctly there must be a correctly formatted /etc/security/group.conf file present. White spaces are ignored and lines maybe extended with '\' (escaped newlines). Text following a '#' is ignored to the end of the line. The syntax of the lines is as follows: services;ttys;users;times;groups The first field, the services field, is a logic list of PAM service names that the rule applies to. The second field, the tty field, is a logic list of terminal names that this rule applies to. The third field, the users field, is a logic list of users, or a UNIX group, or a netgroup of users to whom this rule applies. Group names are preceded by a '%' symbol, while netgroup names are preceded by a '@' symbol. For these items the simple wildcard '*' may be used only once. With UNIX groups or netgroups no wildcards or logic operators are allowed. The times field is used to indicate "when" these groups are to be given to the user. The format here is a logic list of day/time-range entries. The days are specified by a sequence of two character entries, MoTuSa for example is Monday Tuesday and Saturday. Note that repeated days are unset MoMo = no day, and MoWk = all weekdays bar Monday. The two character combinations accepted are Mo Tu We Th Fr Sa Su Wk Wd Al, the last two being week-end days and all 7 days of the week respectively. As a final example, AlFr means all days except Friday. Each day/time-range can be prefixed with a '!' to indicate "anything but". The time-range part is two 24-hour times HHMM, separated by a hyphen, indicating the start and finish time (if the finish time is smaller than the start time it is deemed to apply on the following day). The groups field is a comma or space separated list of groups that the user inherits membership of. These groups are added if the previous fields are satisfied by the user's request. For a rule to be active, ALL of service+ttys+users must be satisfied by the applying process. EXAMPLES These are some example lines which might be specified in /etc/security/group.conf. Running 'xsh' on tty* (any ttyXXX device), the user 'us' is given access to the floppy (through membership of the floppy group) xsh;tty*&!ttyp*;us;Al0000-2400;floppy Running 'xsh' on tty* (any ttyXXX device), the user 'sword' is given access to games (through membership of the floppy group) after work hours. xsh; tty* ;sword;!Wk0900-1800;games, sound xsh; tty* ;*;Al0900-1800;floppy Any member of the group 'admin' running 'xsh' on tty*, is granted access (at any time) to the group 'plugdev' xsh; tty* ;%admin;Al0000-2400;plugdev SEE ALSO pam_group8, pam.d5, pam8 AUTHOR pam_group was written by Andrew G. Morgan <morgan@kernel.org>. Linux-PAM-1.1.8/modules/pam_group/pam_group.80000644000000000000000000000654512216527576015674 00000000000000'\" t .\" Title: pam_group .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_GROUP" "8" "09/19/2013" "Linux-PAM Manual" "Linux-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_group \- PAM module for group access .SH "SYNOPSIS" .HP \w'\fBpam_group\&.so\fR\ 'u \fBpam_group\&.so\fR .SH "DESCRIPTION" .PP The pam_group PAM module does not authenticate the user, but instead it grants group memberships (in the credential setting phase of the authentication module) to the user\&. Such memberships are based on the service they are applying for\&. .PP By default rules for group memberships are taken from config file /etc/security/group\&.conf\&. .PP This module\*(Aqs usefulness relies on the file\-systems accessible to the user\&. The point being that once granted the membership of a group, the user may attempt to create a \fBsetgid\fR binary with a restricted group ownership\&. Later, when the user is not given membership to this group, they can recover group membership with the precompiled binary\&. The reason that the file\-systems that the user has access to are so significant, is the fact that when a system is mounted \fInosuid\fR the user is unable to create or execute such a binary file\&. For this module to provide any level of security, all file\-systems that the user has write access to should be mounted \fInosuid\fR\&. .PP The pam_group module functions in parallel with the /etc/group file\&. If the user is granted any groups based on the behavior of this module, they are granted \fIin addition\fR to those entries /etc/group (or equivalent)\&. .SH "OPTIONS" .PP This module does not recognise any options\&. .SH "MODULE TYPES PROVIDED" .PP Only the \fBauth\fR module type is provided\&. .SH "RETURN VALUES" .PP PAM_SUCCESS .RS 4 group membership was granted\&. .RE .PP PAM_ABORT .RS 4 Not all relevant data could be gotten\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_CRED_ERR .RS 4 Group membership was not granted\&. .RE .PP PAM_IGNORE .RS 4 \fBpam_sm_authenticate\fR was called which does nothing\&. .RE .PP PAM_USER_UNKNOWN .RS 4 The user is not known to the system\&. .RE .SH "FILES" .PP /etc/security/group\&.conf .RS 4 Default configuration file .RE .SH "SEE ALSO" .PP \fBgroup.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8)\&. .SH "AUTHORS" .PP pam_group was written by Andrew G\&. Morgan \&. Linux-PAM-1.1.8/modules/pam_group/group.conf.50000644000000000000000000001124212216527576015746 00000000000000'\" t .\" Title: group.conf .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 09/19/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "GROUP\&.CONF" "5" "09/19/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" group.conf \- configuration file for the pam_group module .SH "DESCRIPTION" .PP The pam_group PAM module does not authenticate the user, but instead it grants group memberships (in the credential setting phase of the authentication module) to the user\&. Such memberships are based on the service they are applying for\&. .PP For this module to function correctly there must be a correctly formatted /etc/security/group\&.conf file present\&. White spaces are ignored and lines maybe extended with \*(Aq\e\*(Aq (escaped newlines)\&. Text following a \*(Aq#\*(Aq is ignored to the end of the line\&. .PP The syntax of the lines is as follows: .PP \fIservices\fR;\fIttys\fR;\fIusers\fR;\fItimes\fR;\fIgroups\fR .PP The first field, the \fIservices\fR field, is a logic list of PAM service names that the rule applies to\&. .PP The second field, the \fItty\fR field, is a logic list of terminal names that this rule applies to\&. .PP The third field, the \fIusers\fR field, is a logic list of users, or a UNIX group, or a netgroup of users to whom this rule applies\&. Group names are preceded by a \*(Aq%\*(Aq symbol, while netgroup names are preceded by a \*(Aq@\*(Aq symbol\&. .PP For these items the simple wildcard \*(Aq*\*(Aq may be used only once\&. With UNIX groups or netgroups no wildcards or logic operators are allowed\&. .PP The \fItimes\fR field is used to indicate "when" these groups are to be given to the user\&. The format here is a logic list of day/time\-range entries\&. The days are specified by a sequence of two character entries, MoTuSa for example is Monday Tuesday and Saturday\&. Note that repeated days are unset MoMo = no day, and MoWk = all weekdays bar Monday\&. The two character combinations accepted are Mo Tu We Th Fr Sa Su Wk Wd Al, the last two being week\-end days and all 7 days of the week respectively\&. As a final example, AlFr means all days except Friday\&. .PP Each day/time\-range can be prefixed with a \*(Aq!\*(Aq to indicate "anything but"\&. The time\-range part is two 24\-hour times HHMM, separated by a hyphen, indicating the start and finish time (if the finish time is smaller than the start time it is deemed to apply on the following day)\&. .PP The \fIgroups\fR field is a comma or space separated list of groups that the user inherits membership of\&. These groups are added if the previous fields are satisfied by the user\*(Aqs request\&. .PP For a rule to be active, ALL of service+ttys+users must be satisfied by the applying process\&. .SH "EXAMPLES" .PP These are some example lines which might be specified in /etc/security/group\&.conf\&. .PP Running \*(Aqxsh\*(Aq on tty* (any ttyXXX device), the user \*(Aqus\*(Aq is given access to the floppy (through membership of the floppy group) .sp .if n \{\ .RS 4 .\} .nf xsh;tty*&!ttyp*;us;Al0000\-2400;floppy .fi .if n \{\ .RE .\} .PP Running \*(Aqxsh\*(Aq on tty* (any ttyXXX device), the user \*(Aqsword\*(Aq is given access to games (through membership of the floppy group) after work hours\&. .sp .if n \{\ .RS 4 .\} .nf xsh; tty* ;sword;!Wk0900\-1800;games, sound xsh; tty* ;*;Al0900\-1800;floppy .fi .if n \{\ .RE .\} .PP Any member of the group \*(Aqadmin\*(Aq running \*(Aqxsh\*(Aq on tty*, is granted access (at any time) to the group \*(Aqplugdev\*(Aq .sp .if n \{\ .RS 4 .\} .nf xsh; tty* ;%admin;Al0000\-2400;plugdev .fi .if n \{\ .RE .\} .SH "SEE ALSO" .PP \fBpam_group\fR(8), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_group was written by Andrew G\&. Morgan \&. Linux-PAM-1.1.8/modules/pam_group/pam_group.8.xml0000644000000000000000000001155012160065211016440 00000000000000 pam_group 8 Linux-PAM Manual pam_group PAM module for group access pam_group.so DESCRIPTION The pam_group PAM module does not authenticate the user, but instead it grants group memberships (in the credential setting phase of the authentication module) to the user. Such memberships are based on the service they are applying for. By default rules for group memberships are taken from config file /etc/security/group.conf. This module's usefulness relies on the file-systems accessible to the user. The point being that once granted the membership of a group, the user may attempt to create a setgid binary with a restricted group ownership. Later, when the user is not given membership to this group, they can recover group membership with the precompiled binary. The reason that the file-systems that the user has access to are so significant, is the fact that when a system is mounted nosuid the user is unable to create or execute such a binary file. For this module to provide any level of security, all file-systems that the user has write access to should be mounted nosuid. The pam_group module functions in parallel with the /etc/group file. If the user is granted any groups based on the behavior of this module, they are granted in addition to those entries /etc/group (or equivalent). OPTIONS This module does not recognise any options. MODULE TYPES PROVIDED Only the module type is provided. RETURN VALUES PAM_SUCCESS group membership was granted. PAM_ABORT Not all relevant data could be gotten. PAM_BUF_ERR Memory buffer error. PAM_CRED_ERR Group membership was not granted. PAM_IGNORE pam_sm_authenticate was called which does nothing. PAM_USER_UNKNOWN The user is not known to the system. FILES /etc/security/group.conf Default configuration file SEE ALSO group.conf5 , pam.d5 , pam8 . AUTHORS pam_group was written by Andrew G. Morgan <morgan@kernel.org>. Linux-PAM-1.1.8/modules/pam_group/group.conf0000644000000000000000000000706312160065211015566 00000000000000# # This is the configuration file for the pam_group module. # # # *** Please note that giving group membership on a session basis is # *** NOT inherently secure. If a user can create an executable that # *** is setgid a group that they are infrequently given membership # *** of, they can basically obtain group membership any time they # *** like. Example: games are allowed between the hours of 6pm and 6am # *** user joe logs in at 7pm writes a small C-program toplay.c that # *** invokes their favorite shell, compiles it and does # *** "chgrp play toplay; chmod g+s toplay". They are basically able # *** to play games any time... You have been warned. AGM # # # The syntax of the lines is as follows: # # services;ttys;users;times;groups # # white space is ignored and lines maybe extended with '\\n' (escaped # newlines). From reading these comments, it is clear that # text following a '#' is ignored to the end of the line. # # the combination of individual users/terminals etc is a logic list # namely individual tokens that are optionally prefixed with '!' (logical # not) and separated with '&' (logical and) and '|' (logical or). # # services # is a logic list of PAM service names that the rule applies to. # # ttys # is a logic list of terminal names that this rule applies to. # # users # is a logic list of users or a netgroup of users to whom this # rule applies. # # NB. For these items the simple wildcard '*' may be used only once. # With netgroups no wildcards or logic operators are allowed. # # times # It is used to indicate "when" these groups are to be given to the # user. The format here is a logic list of day/time-range # entries the days are specified by a sequence of two character # entries, MoTuSa for example is Monday Tuesday and Saturday. Note # that repeated days are unset MoMo = no day, and MoWk = all weekdays # bar Monday. The two character combinations accepted are # # Mo Tu We Th Fr Sa Su Wk Wd Al # # the last two being week-end days and all 7 days of the week # respectively. As a final example, AlFr means all days except Friday. # # Each day/time-range can be prefixed with a '!' to indicate "anything # but" # # The time-range part is two 24-hour times HHMM separated by a hyphen # indicating the start and finish time (if the finish time is smaller # than the start time it is deemed to apply on the following day). # # groups # The (comma or space separated) list of groups that the user # inherits membership of. These groups are added if the previous # fields are satisfied by the user's request # # For a rule to be active, ALL of service+ttys+users must be satisfied # by the applying process. # # # Note, to get this to work as it is currently typed you need # # 1. to run an application as root # 2. add the following groups to the /etc/group file: # floppy, play, sound # # # Here is a simple example: running 'xsh' on tty* (any ttyXXX device), # the user 'us' is given access to the floppy (through membership of # the floppy group) # #xsh;tty*&!ttyp*;us;Al0000-2400;floppy # # another example: running 'xsh' on tty* (any ttyXXX device), # the user 'sword' is given access to games (through membership of # the sound and play group) after work hours. # #xsh; tty* ;sword;!Wk0900-1800;sound, play #xsh; tty* ;*;Al0900-1800;floppy # # yet another example: any member of the group 'admin' running # 'xsh' on tty*, is granted access (at any time) to the group 'plugdev' # #xsh; tty* ;%admin;Al0000-2400;plugdev # # End of group.conf file # Linux-PAM-1.1.8/modules/pam_group/Makefile.am0000644000000000000000000000155012160065211015612 00000000000000# # Copyright (c) 2005, 2006, 2009 Thorsten Kukuk # CLEANFILES = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README group.conf $(MANS) $(XMLS) tst-pam_group man_MANS = group.conf.5 pam_group.8 XMLS = README.xml group.conf.5.xml pam_group.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -DPAM_GROUP_CONF=\"$(SCONFIGDIR)/group.conf\" AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_group.la pam_group_la_LIBADD = $(top_builddir)/libpam/libpam.la secureconf_DATA = group.conf TESTS = tst-pam_group if ENABLE_REGENERATE_MAN noinst_DATA = README README: pam_group.8.xml group.conf.5.xml -include $(top_srcdir)/Make.xml.rules endif Linux-PAM-1.1.8/modules/pam_group/README0000644000000000000000000000413412216527576014462 00000000000000pam_group — PAM module for group access ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESCRIPTION The pam_group PAM module does not authenticate the user, but instead it grants group memberships (in the credential setting phase of the authentication module) to the user. Such memberships are based on the service they are applying for. By default rules for group memberships are taken from config file /etc/security /group.conf. This module's usefulness relies on the file-systems accessible to the user. The point being that once granted the membership of a group, the user may attempt to create a setgid binary with a restricted group ownership. Later, when the user is not given membership to this group, they can recover group membership with the precompiled binary. The reason that the file-systems that the user has access to are so significant, is the fact that when a system is mounted nosuid the user is unable to create or execute such a binary file. For this module to provide any level of security, all file-systems that the user has write access to should be mounted nosuid. The pam_group module functions in parallel with the /etc/group file. If the user is granted any groups based on the behavior of this module, they are granted in addition to those entries /etc/group (or equivalent). EXAMPLES These are some example lines which might be specified in /etc/security/ group.conf. Running 'xsh' on tty* (any ttyXXX device), the user 'us' is given access to the floppy (through membership of the floppy group) xsh;tty*&!ttyp*;us;Al0000-2400;floppy Running 'xsh' on tty* (any ttyXXX device), the user 'sword' is given access to games (through membership of the floppy group) after work hours. xsh; tty* ;sword;!Wk0900-1800;games, sound xsh; tty* ;*;Al0900-1800;floppy Any member of the group 'admin' running 'xsh' on tty*, is granted access (at any time) to the group 'plugdev' xsh; tty* ;%admin;Al0000-2400;plugdev Linux-PAM-1.1.8/modules/pam_group/pam_group.c0000644000000000000000000004502612160065211015721 00000000000000/* pam_group module */ /* * Written by Andrew Morgan 1996/7/6 * Field parsing rewritten by Tomas Mraz */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PAM_GROUP_BUFLEN 1000 #define FIELD_SEPARATOR ';' /* this is new as of .02 */ #ifndef TRUE # define TRUE 1 #endif #ifndef FALSE # define FALSE 0 #endif typedef enum { AND, OR } operator; /* * here, we make definitions for the externally accessible functions * in this file (these definitions are required for static modules * but strongly encouraged generally) they are used to instruct the * modules include file to define their prototypes. */ #define PAM_SM_AUTH #include #include #include #include /* --- static functions for checking whether the user should be let in --- */ static char * shift_buf(char *mem, int from) { char *start = mem; while ((*mem = mem[from]) != '\0') ++mem; memset(mem, '\0', PAM_GROUP_BUFLEN - (mem - start)); return mem; } static void trim_spaces(char *buf, char *from) { while (from > buf) { --from; if (*from == ' ') *from = '\0'; else break; } } #define STATE_NL 0 /* new line starting */ #define STATE_COMMENT 1 /* inside comment */ #define STATE_FIELD 2 /* field following */ #define STATE_EOF 3 /* end of file or error */ static int read_field(const pam_handle_t *pamh, int fd, char **buf, int *from, int *state) { char *to; char *src; int i; char c; int onspace; /* is buf set ? */ if (! *buf) { *buf = (char *) calloc(1, PAM_GROUP_BUFLEN+1); if (! *buf) { pam_syslog(pamh, LOG_ERR, "out of memory"); D(("no memory")); *state = STATE_EOF; return -1; } *from = 0; *state = STATE_NL; fd = open(PAM_GROUP_CONF, O_RDONLY); if (fd < 0) { pam_syslog(pamh, LOG_ERR, "error opening %s: %m", PAM_GROUP_CONF); _pam_drop(*buf); *state = STATE_EOF; return -1; } } if (*from > 0) to = shift_buf(*buf, *from); else to = *buf; while (fd != -1 && to - *buf < PAM_GROUP_BUFLEN) { i = pam_modutil_read(fd, to, PAM_GROUP_BUFLEN - (to - *buf)); if (i < 0) { pam_syslog(pamh, LOG_ERR, "error reading %s: %m", PAM_GROUP_CONF); close(fd); memset(*buf, 0, PAM_GROUP_BUFLEN); _pam_drop(*buf); *state = STATE_EOF; return -1; } else if (!i) { close(fd); fd = -1; /* end of file reached */ } to += i; } if (to == *buf) { /* nothing previously in buf, nothing read */ _pam_drop(*buf); *state = STATE_EOF; return -1; } memset(to, '\0', PAM_GROUP_BUFLEN - (to - *buf)); to = *buf; onspace = 1; /* delete any leading spaces */ for (src = to; (c=*src) != '\0'; ++src) { if (*state == STATE_COMMENT && c != '\n') { continue; } switch (c) { case '\n': *state = STATE_NL; *to = '\0'; *from = (src - *buf) + 1; trim_spaces(*buf, to); return fd; case '\t': case ' ': if (!onspace) { onspace = 1; *to++ = ' '; } break; case '!': onspace = 1; /* ignore following spaces */ *to++ = '!'; break; case '#': *state = STATE_COMMENT; break; case FIELD_SEPARATOR: *state = STATE_FIELD; *to = '\0'; *from = (src - *buf) + 1; trim_spaces(*buf, to); return fd; case '\\': if (src[1] == '\n') { ++src; /* skip it */ break; } default: *to++ = c; onspace = 0; } if (src > to) *src = '\0'; /* clearing */ } if (*state != STATE_COMMENT) { *state = STATE_COMMENT; pam_syslog(pamh, LOG_ERR, "field too long - ignored"); **buf = '\0'; } else { *to = '\0'; trim_spaces(*buf, to); } *from = 0; return fd; } /* read a member from a field */ static int logic_member(const char *string, int *at) { int c,to; int done=0; int token=0; to=*at; do { c = string[to++]; switch (c) { case '\0': --to; done = 1; break; case '&': case '|': case '!': if (token) { --to; } done = 1; break; default: if (isalpha(c) || c == '*' || isdigit(c) || c == '_' || c == '-' || c == '.' || c == '/' || c == ':') { token = 1; } else if (token) { --to; done = 1; } else { ++*at; } } } while (!done); return to - *at; } typedef enum { VAL, OP } expect; static int logic_field (const pam_handle_t *pamh, const void *me, const char *x, int rule, int (*agrees)(const pam_handle_t *pamh, const void *, const char *, int, int)) { int left=FALSE, right, not=FALSE; operator oper=OR; int at=0, l; expect next=VAL; while ((l = logic_member(x,&at))) { int c = x[at]; if (next == VAL) { if (c == '!') not = !not; else if (isalpha(c) || c == '*' || isdigit(c) || c == '_' || c == '-' || c == '.' || c == '/' || c == ':') { right = not ^ agrees(pamh, me, x+at, l, rule); if (oper == AND) left &= right; else left |= right; next = OP; } else { pam_syslog(pamh, LOG_ERR, "garbled syntax; expected name (rule #%d)", rule); return FALSE; } } else { /* OP */ switch (c) { case '&': oper = AND; break; case '|': oper = OR; break; default: pam_syslog(pamh, LOG_ERR, "garbled syntax; expected & or | (rule #%d)", rule); D(("%c at %d",c,at)); return FALSE; } next = VAL; } at += l; } return left; } static int is_same (const pam_handle_t *pamh UNUSED, const void *A, const char *b, int len, int rule UNUSED) { int i; const char *a; a = A; for (i=0; len > 0; ++i, --len) { if (b[i] != a[i]) { if (b[i++] == '*') { return (!--len || !strncmp(b+i,a+strlen(a)-len,len)); } else return FALSE; } } /* Ok, we know that b is a substring from A and does not contain wildcards, but now the length of both strings must be the same, too. In this case it means, a[i] has to be the end of the string. */ if (a[i] != '\0') return FALSE; return ( !len ); } typedef struct { int day; /* array of 7 bits, one set for today */ int minute; /* integer, hour*100+minute for now */ } TIME; static struct day { const char *d; int bit; } const days[11] = { { "su", 01 }, { "mo", 02 }, { "tu", 04 }, { "we", 010 }, { "th", 020 }, { "fr", 040 }, { "sa", 0100 }, { "wk", 076 }, { "wd", 0101 }, { "al", 0177 }, { NULL, 0 } }; static TIME time_now(void) { struct tm *local; time_t the_time; TIME this; the_time = time((time_t *)0); /* get the current time */ local = localtime(&the_time); this.day = days[local->tm_wday].bit; this.minute = local->tm_hour*100 + local->tm_min; D(("day: 0%o, time: %.4d", this.day, this.minute)); return this; } /* take the current date and see if the range "date" passes it */ static int check_time (const pam_handle_t *pamh, const void *AT, const char *times, int len, int rule) { int not,pass; int marked_day, time_start, time_end; const TIME *at; int i,j=0; at = AT; D(("checking: 0%o/%.4d vs. %s", at->day, at->minute, times)); if (times == NULL) { /* this should not happen */ pam_syslog(pamh, LOG_CRIT, "internal error in file %s at line %d", __FILE__, __LINE__); return FALSE; } if (times[j] == '!') { ++j; not = TRUE; } else { not = FALSE; } for (marked_day = 0; len > 0 && isalpha(times[j]); --len) { int this_day=-1; D(("%c%c ?", times[j], times[j+1])); for (i=0; days[i].d != NULL; ++i) { if (tolower(times[j]) == days[i].d[0] && tolower(times[j+1]) == days[i].d[1] ) { this_day = days[i].bit; break; } } j += 2; if (this_day == -1) { pam_syslog(pamh, LOG_ERR, "bad day specified (rule #%d)", rule); return FALSE; } marked_day ^= this_day; } if (marked_day == 0) { pam_syslog(pamh, LOG_ERR, "no day specified"); return FALSE; } D(("day range = 0%o", marked_day)); time_start = 0; for (i=0; len > 0 && i < 4 && isdigit(times[i+j]); ++i, --len) { time_start *= 10; time_start += times[i+j]-'0'; /* is this portable? */ } j += i; if (times[j] == '-') { time_end = 0; for (i=1; len > 0 && i < 5 && isdigit(times[i+j]); ++i, --len) { time_end *= 10; time_end += times[i+j]-'0'; /* is this portable? */ } j += i; } else time_end = -1; D(("i=%d, time_end=%d, times[j]='%c'", i, time_end, times[j])); if (i != 5 || time_end == -1) { pam_syslog(pamh, LOG_ERR, "no/bad times specified (rule #%d)", rule); return TRUE; } D(("times(%d to %d)", time_start,time_end)); D(("marked_day = 0%o", marked_day)); /* compare with the actual time now */ pass = FALSE; if (time_start < time_end) { /* start < end ? --> same day */ if ((at->day & marked_day) && (at->minute >= time_start) && (at->minute < time_end)) { D(("time is listed")); pass = TRUE; } } else { /* spans two days */ if ((at->day & marked_day) && (at->minute >= time_start)) { D(("caught on first day")); pass = TRUE; } else { marked_day <<= 1; marked_day |= (marked_day & 0200) ? 1:0; D(("next day = 0%o", marked_day)); if ((at->day & marked_day) && (at->minute <= time_end)) { D(("caught on second day")); pass = TRUE; } } } return (not ^ pass); } static int find_member(const char *string, int *at) { int c,to; int done=0; int token=0; to=*at; do { c = string[to++]; switch (c) { case '\0': --to; done = 1; break; case '&': case '|': case '!': if (token) { --to; } done = 1; break; default: if (isalpha(c) || isdigit(c) || c == '_' || c == '*' || c == '-') { token = 1; } else if (token) { --to; done = 1; } else { ++*at; } } } while (!done); return to - *at; } #define GROUP_BLK 10 #define blk_size(len) (((len-1 + GROUP_BLK)/GROUP_BLK)*GROUP_BLK) static int mkgrplist(pam_handle_t *pamh, char *buf, gid_t **list, int len) { int l,at=0; int blks; blks = blk_size(len); D(("cf. blks=%d and len=%d", blks,len)); while ((l = find_member(buf,&at))) { int edge; if (len >= blks) { gid_t *tmp; D(("allocating new block")); tmp = (gid_t *) realloc((*list) , sizeof(gid_t) * (blks += GROUP_BLK)); if (tmp != NULL) { (*list) = tmp; } else { pam_syslog(pamh, LOG_ERR, "out of memory for group list"); free(*list); (*list) = NULL; return -1; } } /* '\0' terminate the entry */ edge = (buf[at+l]) ? 1:0; buf[at+l] = '\0'; D(("found group: %s",buf+at)); /* this is where we convert a group name to a gid_t */ { const struct group *grp; grp = pam_modutil_getgrnam(pamh, buf+at); if (grp == NULL) { pam_syslog(pamh, LOG_ERR, "bad group: %s", buf+at); } else { D(("group %s exists", buf+at)); (*list)[len++] = grp->gr_gid; } } /* next entry along */ at += l + edge; } D(("returning with [%p/len=%d]->%p",list,len,*list)); return len; } static int check_account(pam_handle_t *pamh, const char *service, const char *tty, const char *user) { int from=0, state=STATE_NL, fd=-1; char *buffer=NULL; int count=0; TIME here_and_now; int retval=PAM_SUCCESS; gid_t *grps; int no_grps; /* * first we get the current list of groups - the application * will have previously done an initgroups(), or equivalent. */ D(("counting supplementary groups")); no_grps = getgroups(0, NULL); /* find the current number of groups */ if (no_grps > 0) { grps = calloc( blk_size(no_grps) , sizeof(gid_t) ); D(("copying current list into grps [%d big]",blk_size(no_grps))); if (getgroups(no_grps, grps) < 0) { D(("getgroups call failed")); no_grps = 0; _pam_drop(grps); } #ifdef PAM_DEBUG { int z; for (z=0; z 0) { D(("rule #%d passed, added %d groups", count, good)); } else if (good < 0) { retval = PAM_BUF_ERR; } else { D(("rule #%d failed", count)); } } while (state != STATE_EOF); /* now set the groups for the user */ if (no_grps > 0) { #ifdef PAM_DEBUG int err; #endif D(("trying to set %d groups", no_grps)); #ifdef PAM_DEBUG for (err=0; err # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_VERSIONING_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/../modules.map subdir = modules/pam_group DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/japhar_grep_cflags.m4 \ $(top_srcdir)/m4/jh_path_xml_catalog.m4 \ $(top_srcdir)/m4/ld-O1.m4 $(top_srcdir)/m4/ld-as-needed.m4 \ $(top_srcdir)/m4/ld-no-undefined.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libprelude.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man5dir)" \ "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(secureconfdir)" LTLIBRARIES = $(securelib_LTLIBRARIES) pam_group_la_DEPENDENCIES = $(top_builddir)/libpam/libpam.la pam_group_la_SOURCES = pam_group.c pam_group_la_OBJECTS = pam_group.lo DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f 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_group.c DIST_SOURCES = pam_group.c man5dir = $(mandir)/man5 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(noinst_DATA) $(secureconf_DATA) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BROWSER = @BROWSER@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FO2PDF = @FO2PDF@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_KEY_MANAGEMENT = @HAVE_KEY_MANAGEMENT@ 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@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBAUDIT = @LIBAUDIT@ LIBCRACK = @LIBCRACK@ LIBCRYPT = @LIBCRYPT@ LIBDB = @LIBDB@ LIBDL = @LIBDL@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPRELUDE_CFLAGS = @LIBPRELUDE_CFLAGS@ LIBPRELUDE_CONFIG = @LIBPRELUDE_CONFIG@ LIBPRELUDE_CONFIG_PREFIX = @LIBPRELUDE_CONFIG_PREFIX@ LIBPRELUDE_LDFLAGS = @LIBPRELUDE_LDFLAGS@ LIBPRELUDE_LIBS = @LIBPRELUDE_LIBS@ LIBPRELUDE_PREFIX = @LIBPRELUDE_PREFIX@ LIBPRELUDE_PTHREAD_CFLAGS = @LIBPRELUDE_PTHREAD_CFLAGS@ LIBS = @LIBS@ LIBSELINUX = @LIBSELINUX@ 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@ NIS_CFLAGS = @NIS_CFLAGS@ NIS_LIBS = @NIS_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ RANLIB = @RANLIB@ SCONFIGDIR = @SCONFIGDIR@ SECUREDIR = @SECUREDIR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMLCATALOG = @XMLCATALOG@ XMLLINT = @XMLLINT@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ YACC = @YACC@ YFLAGS = @YFLAGS@ 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@ libtirpc_CFLAGS = @libtirpc_CFLAGS@ libtirpc_LIBS = @libtirpc_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_cv_ld_O1 = @pam_cv_ld_O1@ pam_cv_ld_as_needed = @pam_cv_ld_as_needed@ pam_cv_ld_no_undefined = @pam_cv_ld_no_undefined@ pam_xauth_path = @pam_xauth_path@ 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 = *~ MAINTAINERCLEANFILES = $(MANS) README EXTRA_DIST = README group.conf $(MANS) $(XMLS) tst-pam_group man_MANS = group.conf.5 pam_group.8 XMLS = README.xml group.conf.5.xml pam_group.8.xml securelibdir = $(SECUREDIR) secureconfdir = $(SCONFIGDIR) AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include \ -DPAM_GROUP_CONF=\"$(SCONFIGDIR)/group.conf\" AM_LDFLAGS = -no-undefined -avoid-version -module $(am__append_1) securelib_LTLIBRARIES = pam_group.la pam_group_la_LIBADD = $(top_builddir)/libpam/libpam.la secureconf_DATA = group.conf TESTS = tst-pam_group @ENABLE_REGENERATE_MAN_TRUE@noinst_DATA = README all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu modules/pam_group/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu modules/pam_group/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-securelibLTLIBRARIES: $(securelib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(securelibdir)" || $(MKDIR_P) "$(DESTDIR)$(securelibdir)" @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(securelibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(securelibdir)"; \ } uninstall-securelibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(securelib_LTLIBRARIES)'; test -n "$(securelibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(securelibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(securelibdir)/$$f"; \ done clean-securelibLTLIBRARIES: -test -z "$(securelib_LTLIBRARIES)" || rm -f $(securelib_LTLIBRARIES) @list='$(securelib_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_group.la: $(pam_group_la_OBJECTS) $(pam_group_la_DEPENDENCIES) $(LINK) -rpath $(securelibdir) $(pam_group_la_OBJECTS) $(pam_group_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_group.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(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@ $(am__mv) $(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@ $(am__mv) $(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 install-man5: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" @list=''; test -n "$(man5dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man5dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man5dir)" && rm -f $$files; } install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } install-secureconfDATA: $(secureconf_DATA) @$(NORMAL_INSTALL) test -z "$(secureconfdir)" || $(MKDIR_P) "$(DESTDIR)$(secureconfdir)" @list='$(secureconf_DATA)'; test -n "$(secureconfdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(secureconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(secureconfdir)" || exit $$?; \ done uninstall-secureconfDATA: @$(NORMAL_UNINSTALL) @list='$(secureconf_DATA)'; test -n "$(secureconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(secureconfdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(secureconfdir)" && rm -f $$files 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__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; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ 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 \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 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 \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ 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`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(securelibdir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(secureconfdir)"; 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) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-securelibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-secureconfDATA \ install-securelibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man5 install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-secureconfDATA \ uninstall-securelibLTLIBRARIES uninstall-man: uninstall-man5 uninstall-man8 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-securelibLTLIBRARIES 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-man5 install-man8 \ install-pdf install-pdf-am install-ps install-ps-am \ install-secureconfDATA install-securelibLTLIBRARIES \ 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-man \ uninstall-man5 uninstall-man8 uninstall-secureconfDATA \ uninstall-securelibLTLIBRARIES @ENABLE_REGENERATE_MAN_TRUE@README: pam_group.8.xml group.conf.5.xml @ENABLE_REGENERATE_MAN_TRUE@-include $(top_srcdir)/Make.xml.rules # 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: Linux-PAM-1.1.8/modules/pam_group/README.xml0000644000000000000000000000153112160065211015234 00000000000000 --> ]>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_group.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_group-name"]/*)'/>
Linux-PAM-1.1.8/modules/pam_sepermit/0000755000000000000000000000000012216542312014335 500000000000000Linux-PAM-1.1.8/modules/pam_sepermit/sepermit.conf.50000644000000000000000000000545512160066774017143 00000000000000'\" t .\" Title: sepermit.conf .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 06/18/2013 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "SEPERMIT\&.CONF" "5" "06/18/2013" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" sepermit.conf \- configuration file for the pam_sepermit module .SH "DESCRIPTION" .PP The lines of the configuration file have the following syntax: .PP \fI\fR[:\fI